c语言中的指针概念理解

区分4个概念:

1. 指针的类型

  只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型

  例如:

    int*ptr;//指针的类型是int*

    int(*ptr)[3];//指针的类型是int(*)[3]

2. 指针指向的类型

  当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待

  把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型

  例如:

    int*ptr; //指针所指向的类型是int

    int(*ptr)[3]; //指针所指向的的类型是int()[3]

注:不要将“指针的类型”和“指针所指向的类型”搞混

3. 指针的值(指针所指向的内存的地址)

  指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。

  在32 位程序里,所有类型的指针的值都是一个32 位整数,因为32 位程序里内存地址全都是32 位长

  理解下面几句话:

    指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为si zeof(指针所指向的类型)的一片内存区。

    一个指针的值是XX,就相当于说该指针指向了以XX 为首地址的一片内存区域

    一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址

注:指针所指向的内存区和指针所指向的类型是两个完全不同的概念。在例一中,指针所指向的类型已经有了,但由于指针还未初始化,所以它所指向的内存区是不存在的,或者说是无意义的。

4. 指针本身所占据的内存区

  指的是指针的值所占据的内存

  在32 位平台里,指针本身占据了4 个字节的长度

猜你喜欢

转载自www.cnblogs.com/yqs-0705/p/10872801.html