我试图初始化"init_pointer"函数内的整数指针"p".函数返回后,我打印指针和解除引用的值两次.第一个取消引用打印预期值100,但第二个取消引用打印随机值.
#include<stdio.h>
void init_pointer(int d, int **c){
(*c) = &d;
}
int main(){
int x = 100;
int *p;
init_pointer(x,&p);
printf("pointer = %p, value = %d\n",p,*p);
printf("pointer = %p, value = %d\n",p,*p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
pointer = 0x7fffb4d4b9ac, value = 100
pointer = 0x7fffb4d4b9ac, value = 32567
Run Code Online (Sandbox Code Playgroud)
该函数已将值复制到新的局部变量中 init_pointer(int d, int **c)
d是本地的init_pointer这是路过main的x.这两个x和d是独立的变量,其地址是不同的.访问d外部地址init_pointer将导致未定义的行为.
调用这样的函数是没有意义的,但这样可行:
void init_pointer(int *d, int **c)
{
(*c) = d;
}
int main()
{
int x = 100;
int *p;
init_pointer(&x,&p);
printf("pointer = %p, value = %d\n",p,*p);
printf("pointer = %p, value = %d\n",p,*p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
pointer = 0xbfde132c, value = 100
pointer = 0xbfde132c, value = 100
Run Code Online (Sandbox Code Playgroud)