指针小白:修改*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
", &num1);
11     printf("%d
", 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
", &num1);
11     printf("%d
", 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
", sizeof(float *));
5 return 0;
6 }

运行结果如下:

在32为操作系统下,指针变量(char,float,double,int,long)的长度为都4个字节。

64位操作系统下,这些指针变量长度位8个字节。

原文地址:https://www.cnblogs.com/hetaoyuan/p/10063559.html