假设我想为3个整数分配内存:
int *pn = malloc(3 * sizeof(*pn));
Run Code Online (Sandbox Code Playgroud)
现在为我们分配值:
pn[0] = 5550;
pn[1] = 11;
pn[2] = 70000;
Run Code Online (Sandbox Code Playgroud)
要访问第二个值我做:
pn[1]
Run Code Online (Sandbox Code Playgroud)
但[n]运算符只是*(a + n)的快捷方式.那么这意味着我在索引后访问第一个字节.但int是4个字节长,所以我不应该这样做
*(a+sizeof(*a)*n)
Run Code Online (Sandbox Code Playgroud)
代替?它是如何工作的?
好问题,但C会自动将偏移量乘以指向类型的大小.换句话说,当您访问时
p[n]
Run Code Online (Sandbox Code Playgroud)
对于声明为的指针
T *p;
Run Code Online (Sandbox Code Playgroud)
您将p + (sizeof(T) * n)隐式访问该地址.