1

&i我尝试了一个代码来看看和iifi是一个数组有什么区别。我的假设是它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,第三个是指针本身的内存地址。如果我打印iand &i,为什么不&i表示指针的内存地址i

4

2 回答 2

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

不同的是它们的类型,i有整数数组&i的类型,有整数数组的指针类型。

于 2013-07-29T12:39:02.557 回答
2

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

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

有关更多信息,请参阅此 [链接] 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 */
于 2013-07-29T13:55:26.630 回答