指针添加和元素大小

Sim*_*ity 10 c++ pointers

在:http://www.fredosaurus.com/notes-cpp/arrayptr/26arraysaspointers.html

在:指针添加和元素大小

有以下代码:

// Assume sizeof(int) is 4.
int b[100];  // b is an array of 100 ints.
int* p;      // p is a a pointer to an int.
p = b;       // Assigns address of first element of b. Ie, &b[0]
p = p + 1;   // Adds 4 to p (4 == 1 * sizeof(int)). Ie, &b[1]
Run Code Online (Sandbox Code Playgroud)

最后一行中的"p"怎么变成"4"?

谢谢.

tem*_*def 15

(我假设你在最后一行表示"1",而不是"p")

C和C++中的指针算法是一个逻辑加法,而不是数字加法.将一个指针添加到指针意味着"生成一个指向在此存储器之后的内存中的对象的指针",这意味着编译器会根据指向的对象的大小自动扩展指针递增的任何内容.这可以防止您将指针指向对象的中间,或指向未对齐的指针,或两者都有.

  • @SWEngineer-我很抱歉,我不是很清楚。*指针*不会缩放。指针增加的量就是增加的量。这样,写“ptr + 1”意味着“指针的内存地址,加上所指向对象的大小的一倍”。 (2认同)