keer_zu的个人空间 https://bbs.21ic.com/?472461 [收藏] [复制] [RSS]

日志

对C/C++指针的理解

已有 692 次阅读2014-12-21 12:52 |系统分类:兴趣爱好| 编译器, 结构体, 能力

指针就是一个地址,在8位,16位,32位寻址系统里面,分别占1、2、4个字节,寻址能力:256、64K、4G。

一个给定这样的一个数的差别就在于所指定的数据类型上面。
* 如果是一个char,和这个指针相关的就是该指针里面存放的地址所指向的那个字节。
* short、int类型指针所指向的是这2/4个字节数据的基地址,地址增长方向以大小端特性而定。
* struct和class类型指针同上述short和int类似,都是所指数据块儿的基地址,特别是第一个成员的基地址。struct/class可以通过指向他们的指针访问成员,具体形式如:
                                   cur_struct_pointer->member1;
来访问。亦可以通过其成员指针得到整个结构体指针。
* 函数指针起始就是一个函数的入口地址,它是函数被调用时跳转到的目的地址。不同的函数类型因为其返回值和参数个数/类型不同而有所不同。所以指向不同函数的指针类型就区别在这里,其实就是告诉编译器,该函数的数据传递(参数和返回值)方式。

*还有一个很重要的void 类型指针,其实就是为了传递数据方便而已,它可以被各种类型指针赋值,但是不能给别的具体类型指针直接赋值,在使用它们的时候需要强制转换类型。


在我看来,指针也就这些了。  至于指针的声明方法和上述指针本质无关,这是C语言的语法问题,该就近的就近,该先左后右的先左后右,等等。所以指针本身其实很简单,只是在需要内存(堆内存)的申请和释放(malloc和free)的时候,多些注意,不过这又是另外的问题了。和指针无关。

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)