易百教程

数组中的指针数学问题

以下代码声明了一个int数组,并显示该数组在内存中的位置。

#include <stdio.h> 

int main()
{
    int array[5] = { 2, 3, 5, 7, 11 };

    printf("'&array' 的地址是 %p\n", &array);
    printf("'array' 的地址是 %p\n", array);
    system("pause");
    return(0);
}

执行上面示例代码,得到以下结果:

'&array' 的地址是 012FFD68
'array' 的地址是 012FFD68

&对其它变量很重要。但对于数组,它是可选的。那么增加指针会发生什么?

my_pointer++;

存储在指针变量中的地址递增一个单位,而不是一个数字。

什么是单位?

它取决于变量类型。如果指针是char类型指针,那么新地址的确可能是0x8001
但是如果my_pointerintfloat类型,则新地址将类似于:

0x8000 + sizeof(int) 
// 或
0x8000 + sizeof(float)

在大多数系统中,int4个字节,因此可以猜测在增量操作之后my_pointer将等于0x8004

#include <stdio.h> 

int main()
{
    int numbers[10];
    int x;
    int *pn;

    pn = numbers;       /* 初始化指针 */

    /* Fill array */
    for (x = 0; x < 10; x++)
    {
        *pn = x + 1;
        pn++;
    }

    /* 显数数组 */
    for (x = 0; x < 10; x++)
        printf("numbers[%d] = %d\n", x + 1, numbers[x]);

    system("pause");
    return(0);
}

执行上面示例代码,得到以下结果:

numbers[1] = 1
numbers[2] = 2
numbers[3] = 3
numbers[4] = 4
numbers[5] = 5
numbers[6] = 6
numbers[7] = 7
numbers[8] = 8
numbers[9] = 9
numbers[10] = 10