我在 HSW 上遇到了这个程序:
int *p;
int i;
p = (int *)malloc(sizeof(int[10]));
for (i=0; i<10; i++)
*(p+i) = 0;
free(p);
我不完全理解循环。假设内存是字节可寻址的,并且每个整数占用 4 个字节的内存,假设我们为p
从 address 0
to的指针分配 40 个字节的内存39
。
现在,据我了解,指针p
最初包含 value 0
,即第一个内存位置的地址。在循环中,将位移添加到指针以访问后续整数。
我无法理解内存地址 uptil39
是如何以仅 的位移值访问的0 to 9
。我检查并发现指针以4的倍数递增。这是怎么发生的?我猜这是因为整数类型指针,并且每个指针都应该增加它的数据类型的大小。这是真的?
但是,如果我真的想使用整数指针指向内存位置 2 怎么办。所以,我这样做:p = 2
。然后,当我尝试取消引用这个指针时,我应该期待一个分段错误吗?