指针增加的作用是什么? (C / C ++)

时间:2018-05-21 20:58:51

标签: c++ c pointers

假设我有一个指针:int* p; 我可以将指针的地址增加一个:p++;

我的问题是:当你将指针增加一个是什么意思? 你只是在内存上移动一个或者它与类型的大小有关吗?

例如,如果我有一个int和一个双指针会增加一个做同样的事情吗?将它们一个“右”移到记忆中?

1 个答案:

答案 0 :(得分:1)

根据Sombrero Chicken的评论:递增指向x类型的指针将其推进到下一个x。所以sizeof(x)被考虑在内,就像任何必要的对齐一样。

根据C11标准,6.5.6:

  

当向指针添加或从指针中减去具有整数类型的表达式时,结果具有指针操作数的类型。如果指针操作数指向数组对象的元素,并且数组足够大,则结果指向偏离原始元素的元素,使得结果元素和原始数组元素的下标的差异等于整数表达式。换句话说,如果表达式P指向数组对象的第i个元素,则表达式(P)+ N(等效地,N +(P))和(P)-N(其中N具有值n)指向分别为数组对象的第i + n和第i-n个元素,只要它们存在。此外,如果表达式P指向数组对象的最后一个元素,则表达式(P)+1指向一个超过数组对象的最后一个元素,如果表达式Q指向一个超过数组对象的最后一个元素,表达式(Q)-1指向数组对象的最后一个元素。如果指针操作数和结果都指向同一个数组对象的元素,或者指向数组对象的最后一个元素,则评估不应产生溢出;否则,行为未定义。如果结果指向数组对象的最后一个元素之后,则不应将其用作被计算的一元*运算符的操作数。

所以:假设您在一个指针包含普通顺序内存地址的体系结构中,并且您有一个指向大小为4且没有特殊对齐要求的指针,则递增指针将向其地址添加4。假设您指向大小为7但需要与四字节边界对齐的内容,它将添加八个。