十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
因为你传递的是p的值,在point中被更改的只是p的一个拷贝,而不是p本身。在main函数中的p一直没变过
成都创新互联是一家从事企业网站建设、网站制作、成都网站制作、行业门户网站建设、网页设计制作的专业网络公司,拥有经验丰富的网站建设工程师和网页设计人员,具备各种规模与类型网站建设的实力,在网站建设领域树立了自己独特的设计风格。自公司成立以来曾独立设计制作的站点近千家。
如果你改成这样就可以修改p本身的值了:
#include stdio.h
void point(char**p)
{*p+=3;}
int main()
{char b[4]={'a','b','c','d'},*p=b;
point(p);
printf("%c\n",*p);
}
就算函数调用成功,输出也为d,而不是a,数组下标是从0开始.
被调函数的计算结果在离开函数大括号后就已经不在了,
回到主函数的变量p并不是调用函数后的计算结果,p仍然是
数组b的首地址,所以输出是a.
char
*p;//定义全局变量
point(char
*c)
{
p=c+3;
}//全局变量返回计算结果
main()
{
char
b[4]={'a','b','c','d'};
p=b;//p为数组首地址
point(p
);//调用函数,地址加3
printf("%c\n
",
*p);//输出为b[3]
}
程序最后一句如果是:printf("%c\n",*p); 输出 a。
point函数的功能:使传入的指针偏移三个单位。
当你在main函数中调用point函数,将p指针的值传给point函数进行偏移。
在程序运行中当执行一个函数时都是开辟一段空间让函数执行,当执行完毕之后程序就会收回这段空间。
所以说当你执行完point之后程序就收回了空间,所以在point函数中的p的值增加了3.但是当这个函数执行结束后这段空间就被释放了,所以在main函数中p的值不变,所以打印出来得还是 a。