指针作参数不会改变指针的地址?

来源:百度知道 编辑:UC知道 时间:2024/05/13 05:36:41
如:
Point(char*p){p+=3}
Main()
{char b[4]={‘a’,‘b’,’c’,’d’},*p=b;
Point(p);printf(“%c\n”,*p);}
调用函数后p的地址改变了吗?
那为什么输出*p时还是a,而不是d呢?

不会改变

#include<stdio.h>

void aa(int *p)
{
p+=3;
}
int main()
{
int a[5]={1,2,3,4,5};
int *p=a;
printf("%d\n",*p);
aa(p);
printf("%d\n",*p);
}

你要改变的话,你要传递指针变量的地址,像下面这样

#include<stdio.h>

void aa(int **p)
{
*p+=3;
}
int main()
{
int a[5]={1,2,3,4,5};
int *p=a;
printf("%d\n",*p);
aa(&p);
printf("%d\n",*p);
}

会,你可以试试

point函数里的p是point函数内的变量,并不是main里面的p

当然会输出a了。
--------------------------------------------------

你自定义的函数Point(char *p){p+=3} 中的形式参数p与main()中的定义的变量char *p虽然是同样类型同样名称的变量,但两者是截然不同的,它们都是局部变量,只在定义自己的函数中有效。其实变量除了有类型之分,如int ,char ,float之分以外,还有作用域的分别。
point函数中的p在执行完之后,就会释放存储空间,它是自动类型的变量,它仅在调用它的时候才为其分配存储空间,并且只在定义它的函数内有效,当函数调用结束后,变量空间被释放。main函数中的p也是自动变量,但是它的作用范围在整个main函数内,printf的函数调用的时候就是输出它的值。
关于变量的存储