![]() |
#2
rjsp2022-08-05 10:38
|
以下设 int x = 16; int *zhizhen; zhizhen = &a;
char chr[6] = "Hello\0"; char *zzChr; zzChr = &chr;
1. *zhizhen 返回16(zhizhen对应值,也就是x的值);
2. 直接用zhizhen,没星号的话,会返回存储地址;
3. 要想对zhizhen的对应值赋值,前面必有星号,若无星号,则改变了地址,值也变得很杂乱了;如果改变地址后再改变对应值,可能会对系统造成暂时损伤。
4. 执行 *zhizhen++ 会把zhizhen的对应值加一并赋值,赋值时a(指向的变量)的值也会变;但你把 *zhizhen++ 去掉星号(成zhizhen++),会改变zhizhen指向的地址。
5. 指针变量进行++,没有星号,会把指向位置加上它的数据长度并改变。通常用于数组。比如zzChr++会把它指向字符串下一个位置,原先*zzChr的值是'H',现在是'e'。
6. 指针可指向NULL常量值,表示空。
7. 为什么不能直接int *zhizhen = &a;呢?因为不是说了吗,有星号是对应值,无星号是指针地址,如果这样的话,会把a的位置赋值到内存中一个不知道干嘛的地方,可能会对系统造成损伤。
8. 考考大家,为什么*(zzChr + 2) 相当于 *zzChr[2]呢?(假设zzChr的地址还是chr数组的地址,没进行改变)