从这里张贴的问题数量来看,很明显,人们在理解指针和指针算术时会遇到一些相当基本的问题.

我很想知道为什么.它们从未真正给我带来重大问题(尽管我第一次了解它们是在新石器时代).为了更好地回答这些问题,我想知道人们觉得什么是困难的.

那么,如果您正在为指针而苦苦挣扎,或者您最近突然"明白了",那么指针的哪些方面给您带来了问题呢?

推荐答案

我怀疑人们的回答有点太深入了.实际上并不需要了解调度、实际CPU操作或汇编级内存管理.

当我在教学时,我发现学生理解上的以下漏洞是最常见的问题来源:

  1. 堆与堆栈存储.令人震惊的是,有多少人甚至在一般意义上都不理解这一点.
  2. 堆叠框架.只是局部变量的堆栈专用部分的一般概念,以及它是"堆栈"的原因...在有人try 构建编译器之前,可以安全地保留返回位置、异常处理程序详细信息和以前的寄存器等详细信息.
  3. "Memory is Memory is Memory"强制转换只改变操作符的版本,或者编译器为特定的内存块提供了多少空间.当人们谈论"什么是(原始)变量Xreally"时,您就知道您正在处理这个问题.

我的大多数学生都能理解一块内存的简化图,通常是当前范围内堆栈的局部变量部分.通常,给不同的地点提供明确的虚构地址会有所帮助.

总之,我想说,如果你想理解指针,你必须理解变量,以及它们在现代体系 struct 中的实际含义.

C++相关问答推荐

整值的最后一个字节如何影响C转换中的char强制转换?

在Windows上构建无聊的SSL x64

错误:在.h程序中重新定义 struct

仅在给定的大小和对齐方式下正确创建全局

在C语言中,在数学运算过程中,为什么浮点数在变量中的行为不同

为什么GDB/MI进程的FIFO循环中有read()阻塞

fwrite无法写入满(非常大)缓冲区

限制不同类型的限定符

如何识别Linux中USB集线器(根)和连接到集线器(根设备)的设备(子设备)?

在创建动态泛型数组时,通过realloc对故障进行分段

在另一个函数中使用realloc和指针指向指针

GTK函数调用将完全不相关的char* 值搞乱

Wcstok导致分段故障

不确定如何处理此编译错误

从另一个宏函数调用C宏

生成的头文件不包括用户定义的文件

将char*铸造为空**

当另一个指向 const 的指针观察到数据时,通过指针更改数据是否安全?

将数组中的所有元素初始化为 struct 中的相同值

为什么 int32_t 和 int16_t 在 printf 输出中具有相同的位数?