C语言:数组指针赋值问题探讨(基于四个示例)
关于指针自增与数组元素指向的疑问解答
嘿,我来给你把这个问题讲明白~你疑惑的核心其实是C/C++里的指针算术规则,这是语言设计时就定好的逻辑,跟指针指向的数据类型直接相关:
- 指针的自增(
pi++)或自减操作,不是简单地把内存地址加1或减1字节,而是根据指针指向的类型的大小来计算偏移量。- 比如你提到的
int类型:假设你的系统中sizeof(int) = 4,那当pi是指向int的指针时,pi++会自动让地址增加4字节,刚好指向数组的下一个int元素——这也是为什么*pi = 0(指向首元素)之后,*pi++(或者先自增再取值)就能操作下一个元素,完全不用手动计算字节数。 - 而
char类型的情况:C标准规定sizeof(char)永远是1,所以指向char的指针自增1时,地址就会加1字节,正好指向相邻的下一个char元素,这完全符合你的猜想。
- 比如你提到的
你提到的错误示例,问题出在混淆了“指针自增操作”和“手动修改地址值”:如果强行把int指针的地址加1字节(比如用(char*)pi + 1这种方式),那它指向的就不再是一个完整的int元素了,不仅不属于数组的有效元素,还可能触发内存不对齐的问题(有些CPU架构不允许访问不对齐的int数据),这属于未定义行为,自然是错误的写法。
总结一下:指针算术是“类型感知”的,目的就是让你不用关心具体的字节大小,直接通过指针操作数组元素就好~
内容的提问来源于stack exchange,提问作者AndrejCoding
相关产品推荐
相关产品推荐

