指针

8.1.4章节的“指针的效率”,以后深究可以看看。

指针算是最有特色的语法了 指针: 指向“值”在内存中的地址

int a;
int *b;  
b = &a;
int *a; //a会是非法地址 -- 静态变量是0,自动变量未知 ; 或者恰好是某个合法地址
*a = 12; //尝试赋值会出错,内存错误/(边界)总线错误 ; 或者产生非预期的赋值

NULL指针

上文说静态变量是0是非法的。

但是实际编码的时候,指针的値是0的时候,会被认为是NULL指针。因为编译器会处理,并将其实际地址指向一个合法的空指针位置。

指针常量化

* (int *)100 = 25;

你必须明确知道100这个地址是你需要存放25的位置。

运算

指针加上一个整数的结果是另一个指针,且实际增加的字节数是 (整数*指针的类型的字节数)

算数运算

支持加减:但是只能运用于数组(实际上也能运用于动态分配的内存,但是标准里没有)

对于上述的理解就是,连续的地址即可。

相减的结果类型是ptrdiff_t

关系运算

任意指针支持 等于、不等于

指向同一个数组元素的两个指针支持 大于、小于、大于等于、小于等于

(注意边界值,不符合标准的比较是无法预期结果的)

高级话题

原书13章节:包括复杂声明的推导、命令行参数等。

Last updated

Was this helpful?