我坐着,不打扰任何人,写着 helloworld。我正在尝试使用内存指针。 - “如果你看看接下来会发生什么!”并开始放大这个指针。
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr = malloc(sizeof(int));
int *new_ptr = ptr;
if (ptr != NULL) {
int i;
for (i=0; i<100000; i++) {
if (*new_ptr != 0) {
printf("%p: %X \n", new_ptr, *new_ptr);
}
new_ptr=new_ptr+1;
}
free(ptr);
}
}
奇怪的是:尽管我将指针增加了 1,但地址却增加了 4。为什么不能在 0x5568ff6382c0 之后有 0x5568ff6382c1。当然我这里有些不明白,请解释一下。
因为类型化指针(在您的情况下为
int
)会增加适当的大小以移动到内存中的下一个元素。一切都变得如此简单。例如,
这是什么意思
*(p+1)
?元素arr[1]
。如果p
它增加 1 个字节,您最终将位于元素之间的某个位置。不方便:)