如果我是一个整数数组,那么& i和i之间的C有什么区别?

时间:2013-07-29 12:36:22

标签: c arrays pointers memory-address

如果&i是数组,我尝试使用代码查看ii之间的区别。我的假设是i表示数组的起始地址,我不知道如果我打印&i会发生什么。 结果令人惊讶(对我而言),因为i&i都是数组的起始地址。

#include<stdio.h>

int main()
{
    char str[25] = "IndiaBIX";

    int i[] = {1,2,3,4};

    printf("%i\n", &i);
    printf("%i\n", i);
    return 0;
}

结果将是:

2686692  
2686692

这是相同的地址。

但是如果我使用指向int的指针:

#include<stdio.h>
#include <stdlib.h>

int main()
{
    int *j = (int *) malloc(sizeof(int));
    *j = 12;

    printf("%i %i %i\n", *j,j,&j);
    return 0;
}

结果将是:

12
5582744
2686748

这里假设第一个是j指向的内存区域的值,第二个是j指向的内存区域的地址,第三个是i指向的内存区域的地址。指针本身。如果我打印&i&i,为什么i不代表指针{{1}}的内存地址?

2 个答案:

答案 0 :(得分:4)

int i[] = {1,2,3,4};

区别在于它们的类型,i有一个整数数组类型,&i有一个整数数组的指针类型。

答案 1 :(得分:2)

是的,i和&amp; i都打印出相同的答案,但它们并不完全相同,

- &GT; i表示名为i的数组中第一个元素的地址。
- &GT; &amp; i表示整个数组的地址(尽管两者的值相同,但它们的类型不同)

有关详情,请参阅[link] http://publications.gbdirect.co.uk/c_book/chapter5/arrays_and_address_of.html

                    int ar[10];
                    ip = ar;                /* address of first element */
                    ip = &ar[0];            /* address of first element */
                    ar10i = &ar;            /* address of whole array */