1 #include<stdio.h> 2 //2020年11月23日20:58:58 3 int main(void) 4 { 5 double * p; 6 double x = 66.6; 7 8 p = &x;//x占8个字节,1个字节是8位,1个字节1个地址, 9 //p存放的是第一个字节的地址,而不是8个字节的地址 10 double arr[3]={1.1,2.2,3.3}; 11 double * q; 12 13 q=&arr[0]; 14 printf("%p ",q); 15 q=&arr[1]; 16 printf("%p ",q); 17 return 0; 18 }
其中%p是以十六进制输出;
可以看到 arr[0]和arr[1]地址相差8个字节(double类型)。
题2:
1 #include<stdio.h> 2 //2020年11月23日20:58:58 3 void f(int *); 4 int main(void) 5 { 6 int i=9; 7 int * p =&i;//等价于int * p; p=&i; 8 //现在想要修改p的值(不是i的值哦) 9 //先打印一下p的值看一下 10 printf("%p ",p); 11 f(p);//error,p也是一个变量,需要传递p的地址才能修改p的值 12 //f(p); 13 printf("%p ",p); 14 return 0; 15 } 16 void f(int * q) 17 { 18 q=(int *)0xffffffff; 19 }
可以看到p的值并未改变,因为p和q是两个变量,改变q的值不会影响p的值;
下面来传递地址试试看呢?
1 #include<stdio.h> 2 //2020年11月23日20:58:58 3 void f(int **); 4 int main(void) 5 { 6 int i=9; 7 int * p =&i;//等价于int * p; p=&i; 8 //现在想要修改p的值(不是i的值哦) 9 //先打印一下p的值看一下 10 printf("%p ",p); 11 //f(p);//error,p也是一个变量,需要传递p的地址才能修改p的值 12 f(&p); 13 printf("%p ",p); 14 return 0; 15 } 16 void f(int ** q) 17 { 18 *q=(int *)0xffffffff; 19 }
OK搞定