指针

将《让你不再害怕指针》又扫了一遍,菜鸟每次都有不同的收获

指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在32位程序里,所有类型的指针的值都是一个32位整数,因为32位程序里内存地址全都是32位长。指针所指向的内存区就是从指针的值所代表的那个内存地址开始。长度为sizeof(所指向的类型)的一片内存区。一个指针的值是XX,就相当于说该指针指向了以XX为首地址的一片内存区域;指向了某块内存区域,相当于该指针值是这块内存区域的首地址

如果指针所指向的类型已经有了,但是指针没有初始化,那么它指向的内存区域是不存在的,或者说是无意义的

一个指针ptrold加/减一个整数n后,结果是一个新的指针ptrnew,ptrold和ptrnew的类型相同,所指向的类型也相同。ptrnew所指向的内存区域将比ptrold所指向的内存区域向高/低地址方向移动了n * sizeof(ptrold所指向的类型)个字节

声明一个数据TYPE array[n],那么数组名称array就有两层含义:

1:它代表了整个数组,它的类型是TYPE[n]

2:它是一个常量指针,该指针的类型是TYPE *,该指针指向的类型是TYPE,也就是数组单元的类型,该指针指向的内存区域就是数组第0号元素,该指针自己占有单独的内存区域,它和数组第0号元素所占据的内存区域是不同的,该指针的值无法修改,即array++的表达式是错误的

发表回复