8.2 指针的意义和互相赋值

(1) pn = pc

pn是int * 类型的,pc是char * 类型的,类型不匹配,如果一定要使用,必须要使用强制类型转换,将类型转换成一样,才能进行互相赋值。

(2) pn = &c

c是char类型的,&c是对c取地址,&c是一个指针,类型就是char *,而pn是int * 类型,类型也不匹配。

pn = (int *) & c; 

&c 是char * 类型,可以用(int *)将 &c强制转换为(int *)类型,现在pn和&c都是(int *)类型了,就能进行相互赋值了。

int n = *pn;

这里* pn是指pn指向的内存地址的四个字节的变量,但是pn = (int *) & c,pn指向的是c的地址,只有一个字节,后面3个字节的内容不确定,所以n的值也不确定。

* pn = 0x12345678;

这里也很可能会出错,因为pn指向的是c的地址,只有一个字节,此时c后面的3个存储空间的内容就会改变,操作系统可能不会让我们访问c后面的3个空间,所以从c开始的4个空间中写入0x12345678的操作很可能就出错了,程序因此可能会崩溃。

猜你喜欢

转载自blog.csdn.net/yanyanwenmeng/article/details/81122276
8.2