C语言之指针表达式

本文主要以一个例子分析一些复杂的指针表达式.
首先定义变量如下:

char ch = 'a';
char &ptr_ch = &ch;
char **pptr_ch = &ptr_ch;

假设设备有64KB的内存, 地址标号为 0x0000~0xFFFF, 再假设执行上述代码后内存分配情况如下图:
C语言之指针表达式_第1张图片

表达式 作为右值 作为左值
ch 指的是字符a 指的是地址标号为 0xA6B0 的这块内存
&ch 指的是变量ch所占内存的地址标号 0xA6B0 无效左值
ptr_ch 指的是变量ptr_ch的内容 0xA6B0 指的是地址标号为 0xEFA0 的这块内存
&ptr_ch 指的是指针变量ptr_ch所在地址标号 0xEFA0 无效左值
*ptr_ch 指的是指针ptr_ch所指内存中的内容 指的是指针ptr_ch所指的内存
*ptr_ch+1 指的是变量ptr_ch所指内存中的内容加1后的值 无效左值
*(ptr_ch + 1) 指的是ptr_ch中内容加1后所指的内存中的内容 指的是ptr_ch所占内存中的内容加1后所指的内存
++ptr_ch ptr_ch所指内存的下一个内存单元的地址 无效左值
ptr_ch++ ptr_ch所指内存的地址 无效左值
*++ptr_ch ptr_ch所指内存的下一个内存单元的内容 ptr_ch所指内存的下一个内存单元
*ptr_ch++ ptr_ch所指内存单元的内容 ptr_ch所指内存单元
++*ptr_ch ptr_ch所指内存中内容加1的值 无效左值
(*ptr_ch)++ ptr_ch所指内存中内容 无效左值
++*++ptr_ch ptr_ch所指内存下一个内存单元中的内容加1后的值 无效左值
++*ptr_ch++ ptr_ch所指内存单元中的内容加1后的值 无效左值

你可能感兴趣的:(C语言)