代码基本上做的是打印指针i和ch指向的int和char数组中每个元素的地址。
#include<stdio.h>
int main()
{
char *ch;
int *i;
int ctr;
ch = malloc(sizeof(char)*10);
i = malloc(sizeof(int)*10);
printf("Index\ti Address\tch Address\n\n");
for(ctr=0; ctr<10; ctr++)
{
printf("%d\t%p\t%p\n",ctr,i+ctr,ch+ctr);
}
getch();
return 0;
}
结果:
Index i Address ch Address
0 00511068 00511050
1 0051106C 00511051
2 00511070 00511052
3 00511074 00511053
4 00511078 00511054
5 0051107C 00511055
6 00511080 00511056
7 00511084 00511057
8 00511088 00511058
9 0051108C 00511059
据我所知,两个数组中的每个元素都占用了数据类型的空间大小。我的问题是,我对此操作感到困惑:
i+1
如果i
为00511068,则i+1
为00511069
,而不是结果。 i+1
的含义是什么?你怎么看的?我想我并不完全理解指针。请帮我理解。谢谢。
答案 0 :(得分:10)
这是因为int
在这个系统上是4个字节。所以指针上的+1
会将它增加4而不是1。
当你增加一个指针时,你可以用它的实际大小来增加它,而不是指针值本身。
答案 1 :(得分:9)
答案 2 :(得分:4)
pointer + j
与&(pointer[j])
相同,因此它是pointer
指向的数组中第j个元素的地址。
显然,指向大数据类型的指针将增加多于指向小数据类型的指针。