数组指针

时间:2017-07-15 16:31:04

标签: c

我了解到,只是数组名称本身具有该数组的第一个元素的地址值。例如, int num [] = {1,2,3}; 所以 num 的值为& num [0] 和a单独的地址。但是,当我尝试找到 num 的地址时,它会为我提供与& num [0] 相同的地址。 Aren他们应该有不同的地址 num & num [0]

int main(){
    int num[4]={1,2,3,4};
    int* int_ptr = num;
    printf("%d\n", &num[0]);
    printf("%d\n", num);

    printf("%d\n", &num);
    printf("%d", int_ptr);
}

我的输出是:

6422268
6422268
6422268
6422268

3 个答案:

答案 0 :(得分:5)

想象一下,一群人和一个人指向队列中的第一个人(这是你的第一个元素的地址")。现在想象另一个人指向整个队列。这两个人是否指向同一个方向?

如果你告诉他们指向下一个元素(第一个队列中的第二个人,另一个队列是另一个队列)会怎样?

看到区别?

int arr[1000];
&arr[0] + 1 == &arr[1]
&arr + 1 == <pointer to inexistent array[1000] of int>

答案 1 :(得分:0)

No becacuse num不存在作为位于内存中某处的指针,并且它只是连续内存块的地址以容纳表元素。它只是计算出来的东西,但并不是作为一个单独的物理存在而存在的。指针对象。所以num,&amp; num和&amp; num [0]地址完全相同,并指向存储表元素的内存的开头。

尝试分析此示例:

int main()
{

    int num[10];
    int *numptr = num;

    printf("num = %p, &num = %p, &num[0] = %p\n\r", num, &num, &num[0]);
    printf("numptr = %p, &numptr = %p, &numptr[0] = %p\n\r", numptr, &numptr, &numptr[0]);

    return 0;
}

结果:

num = 0000001F3C2FFAB0, &num = 0000001F3C2FFAB0, &num[0] = 0000001F3C2FFAB0
numptr = 0000001F3C2FFAB0, &numptr = 0000001F3C2FFAD8, &numptr[0] = 0000001F3C2FFAB0

答案 2 :(得分:-1)

num指向数组中的第一项,与&amp; num [0]相同。这就是为什么他们都给你相同的地址。 也使用%p打印地址