代码基本上做的是打印指针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;
}
Run Code Online (Sandbox Code Playgroud)
结果:
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
Run Code Online (Sandbox Code Playgroud)
我知道两个数组中的每个元素占用其数据类型的空间大小.我的问题是,我对此操作感到困惑:
i+1
Run Code Online (Sandbox Code Playgroud)
如果i是00511068,则i+1是00511069因为反对的结果.什么i+1意思?你怎么看的?我想我并不完全理解指针.请帮我理解.谢谢.
Mys*_*ial 10
这是因为int这个系统上有4个字节.所以+1在指针上将它增加4而不是1.
增加指针时,将其增加实际大小而不是指针值本身.
啊,是的,那个老板栗.将N添加到指针时会有一些魔力; 编译器直觉你想要第N个项的地址,并将偏移量乘以数据类型的大小.
pointer + j与 相同&(pointer[j]),因此它是 指向的数组中第 j:th 元素的地址pointer。显然,指向大数据类型的指针将比指向小数据类型的指针递增更多。