qq_41945416 2025-12-21 23:01 采纳率: 90.6%
浏览 4
已结题

关于C++指针是否移动的问题

1.1不管是指针变量,还是函数指针。只要是指针,那它就一定装的是地址吗?指针就是地址,而且是首地址吗?
1.2为什么指针变量要保存首地址,而不是末地址呢?或为何不把两者都保存下来呢?
1.3不管是int类型 float类型 CString类声明的指针变量,指针占用的字节数都是一样的吗?
1.4如果指针占用的字节数一样,从首位地址到末尾地址,中间得有多少个这样的地址,这个个数的多少才取决于类或类型吗?指针能够在首地址到末地址之间移来移去的吗?指针移来移去的这有什么意义?

  • 写回答

1条回答 默认 最新

  • 关注

    1.1 指针是不是只装地址,而且是首地址?

    指针变量说白了就是个“存地址的盒子”,里面只装内存地址,不是指针本身是地址哈;而且装的肯定是目标数据的首地址——不管是普通变量指针还是函数指针,都这样,因为程序访问数据都是从开头来的。

    1.2 为啥只存首地址,不存末地址或都存?

    简单说就是“够用又省事儿”:指针的类型(比如int、float)已经告诉编译器“单个数据占多少字节”,有首地址+类型,算末地址就是顺手的事儿;要是存两个地址,既多占内存,程序计算起来也绕,完全没必要。

    1.3 不同类型的指针,占用字节数一样不?

    一样的!比如int、float、CString*,在你电脑上(比如64位系统)都占8字节,32位系统就都占4字节。因为指针存的是内存“门牌号”,门牌号的长度只看系统位数,跟门里装的是int还是字符串没关系。

    1.4 指针能在首末地址间移动不?移动有啥用?

    能移,但不是瞎移:指针加减数字时,步长是“数字×指向类型的字节数”(比如int移1步是4字节,char移1步是1字节)。从首到末的地址个数,就是总字节数除以单个类型的字节数。
    移动的意义超实用:遍历数组、操作MFC里的缓冲区/文件数据、链表遍历,靠指针移动又快又直接,比用下标方便多了——就是别移出圈儿(越界),一越界程序就容易崩。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月18日
  • 已采纳回答 1月10日
  • 创建了问题 12月21日