回 帖 发 新 帖 刷新版面

主题:[讨论]为何


#include<stdio.h>
void pointer1(int x,int y)
{
    int t=1;
        x=x+t;y=y+t;
    return;
}
void pointer2(int *x,int *y)
{
    int t=1;
    *x=*x+t;
    *y=*y+t;
    return;
}
void pointer3(char *p)
{
    p+=2;
    *p=*p+1;
}
void main()
{
    char b[4]={'a','v','w','z'},*pt=b;
    int x=2,y=3;
    pointer1(x,y);
    printf("x=%d y=%d\n",x,y);
    pointer2(&x,&y);
    printf("x=%d y=%d\n",x,y);
    pointer3(pt);
    printf("*(pt+2)=%c \n",*(pt+2));
}
point1(x,y)为何输出的是2,3而不是2,4
pointer3(pt)为何输出的是x  ??

回复列表 (共1个回复)

沙发

pointer1()中的x,y  和main()中的x,y  具有不同的内存地址,向pointer1()传递的只是数值不是地址,

pointer1()中的x,y改变是影响不了main()中的x,y的.

pointer3(pt);传递是pt所指向的地址

void pointer3(char *p)
{
    p+=2;
    *p=*p+1;
}
现在p和pt都指向同样的地址,所以pointer3()可以修改pt所指向的地址的值,*p=*p+1;数组的第三个元素改为了'x'.

p+=2;这句只改变了p所指向的地址,并没有改变pt都指向的地址

所以pt还是指向数组的第一个元素

pt+2指向数组的第三个元素

我来回复

您尚未登录,请登录后再回复。点此登录或注册