1.指针变量的运算
指针变量不能相加 不能相乘 也不能相除
如果两个指针变量指向的是同一块连续空间中的不同存储单元
则这两个指针变量才可以相减
# include <stdio.h> int main(void) { int i = 5; int j = 10; int * p = &i; int * q = &j; int a[5]; p = &a[1]; q = &a[4]; printf("p和q所指向的单元相隔%d个单元 ", q-p);//p和q所指向的单元相隔3个单元 //p - q 没有实际意义 return 0; }
2、一个指针变量占几个字节(非重点)
预备知识:
sizeof(数据类型)
功能:返回值就是该数据类型所占的字节数
例子:sizeof(int)=4 sizeof(char)=1
sizeof(double)=8
sizeof(变量名)
功能:返回值是该变量所占的字节数
假设p指向char类型变量(1个字节)
假设q指向int类型变量(4个字节)
假设r指向doub1e类型变量(8个字节)
请问:pqr本身所占的字节数是否一样?
答案:pqr本身所占的字节数是一样的
总结:
一个指针变量,无论它指向的变量占几个字节该指针变量本身只占四个字节
一个变量的地址是用该变量首字节的地址来表示
/*--------------------------------------------------------------------- 一个指针变量占几个字节的问题 ----------------------------------------------------------------------- p、q、r只存放了第一个字节的地址,但p、q、r占4个字节 因为第一个编号地址需要4个字节去保存 cpu控制内存有32根线即32位,8位一个字节,即4个字节去控制每一个单元地址 ----------------------------------------------------------------------*/ # include <stdio.h> int main(void) { char ch = 'A'; int i = 99; double x = 66.6; char * p = &ch; int * q = &i; double * r = &x; printf("%d %d %d ", sizeof(p), sizeof(q), sizeof(r)); return 0; } /*------------------------------------ 输出结果: 4 4 4 Press any key to continue -------------------------------------*/