C - 指针+ 1含义

时间:2011-10-25 07:47:12

标签: c arrays pointers

代码基本上做的是打印指针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+100511069,而不是结果。 i+1的含义是什么?你怎么看的?我想我并不完全理解指针。请帮我理解。谢谢。

3 个答案:

答案 0 :(得分:10)

这是因为int在这个系统上是4个字节。所以指针上的+1会将它增加4而不是1。

当你增加一个指针时,你可以用它的实际大小来增加它,而不是指针值本身。

答案 1 :(得分:9)

啊,是的,那个老板栗。将N添加到指针时会有一些魔力;编译器直觉你想要第N个项的地址,并将偏移量乘以数据类型的大小。

答案 2 :(得分:4)

pointer + j&(pointer[j])相同,因此它是pointer指向的数组中第j个元素的地址。 显然,指向大数据类型的指针将增加多于指向小数据类型的指针。