如果&i
是数组,我尝试使用代码查看i
和i
之间的区别。我的假设是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}}的内存地址?
答案 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 */