一、指针理解
- 指针是一个变量,用来存放地址的变量
- 指针变量:是一个变量;是指有一个存储空间,里面放的是指针
- 变量指针:变量的地址
- 指针的存在是为了方便计算机的内存管理,经过计算和权衡,我们发现,一个字节给一个地址是比较合适的,在32位的机器上,假设有32根地址线,就可以编2^32个地址,就能对4G的空间进行编址,且地址由32个比特位组成,也就是4个字节,所以存放地址需4个字节的空间;在64位机器上,假设有64根地址线,就可以编2^64个地址,就能对2^26G的空间进行编址,且地址由64个比特位组成,也就是8个字节,所以存放地址需8个字节的空间
三、指针表达式
在指针表达式中,变量做左值与右值含义不同,通常变量做左值,变量名对应存储空间;而变量做右值,代表数据内容。
那么,若有:
char ch = 'a';
char *cp = &ch;
则,下列代码能做左值或右值吗?
&ch; 可以做右值
cp; 可以做右值,也可以做左值
&cp; 可以做右值
*cp+1; 可以做右值,不可以做左值
*(cp+1); 可以做右值,也可以做左值
++cp; 可以做右值,不可以做左值
cp++; 可以做右值,不可以做左值
*++cp; 可以做右值,也可以做左值
*cp++; 可以做右值,也可以做左值
++*cp; 可以做右值,不可以做左值
(*cp)++; 可以做右值,不可以做左值
++*++cp; 可以做右值,不可以做左值
++*cp++; 不可以做右值,不可以做左值
四、指针运算
- 指针+- 整数
- 指针-指针
- 指针的关系运算
标准规定:
允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较。