指针小白:修改*p与p会对相应的地址的变量产生什么影响?各个变量指针的长度为多少?
这两天敲代码碰到了一个这样的问题
代码如下:
1 #include <stdio.h> 2 #include <stdlib.h> 3 int main() 4 { 5 int num1 = 10; 6 7 int* p=&num1; 8 *p = 20; 9 10 printf("%p\n", &num1); 11 printf("%d\n", num1); 12 system("pause"); 13 return 0; 14 }
运行结果如下:
第二个代码
1 #include <stdio.h> 2 #include <stdlib.h> 3 int main() 4 { 5 int num1 = 10; 6 7 int* p = &num1; 8 p = 20; 9 10 printf("%p\n", &num1); 11 printf("%d\n", num1); 12 system("pause"); 13 return 0; 14 }
运行结果如下:
通过比较第一个程序与第二个程序差别在于,第一个修改的是*p=20,第二个修改的是p=20,最后打印出来的num1的结果带*p的为20,带p的为10。
这是因为通过*p改变了&num1地址里的变量,而修改p则对地址里的变量的值没有影响。
另外,指针变量长度的计算:
1 #include <stdio.h> 2 #include <stdlib.h> 3 int main(){ 4 printf("%d\n", sizeof(float *)); 5 return 0; 6 }
运行结果如下:
在32为操作系统下,指针变量(char,float,double,int,long)的长度为都4个字节。
64位操作系统下,这些指针变量长度位8个字节。