读书人

诸位看看这个面试题小弟困惑中.

发布时间: 2013-03-14 10:33:15 作者: rapoo

各位看看这个面试题,小弟困惑中......


#include <stdio.h>
void add(int array[]);
int main(int argc, char *argv[])
{
int a[3] = {1, 2, 0};
add(a);
printf("%x\n", &a[0]);
printf("%x\n", &a[1]);
printf("%x\n", &a[1] - &a[0]);
return 0;
}
void add(int array[])
{
array[2] = array[0] + array[1];
}

运行结果是什么?为什么?(编译系统自行指定)
[解决办法]
printf("%x\n", &a[0]); //address of a[0]
printf("%x\n", &a[1]); //address of a[1]
printf("%x\n", &a[1] - &a[0]); //1 (int*)指相。
[解决办法]
《The C Programing Language》里 第五章第三节 指针与数组 里有介绍

对数组元素a[i]的引用也可以写为*(a+i)这样的形式。
在求数组元素a[i]的值时,C语言实际上先将其转换成*(a+i)的形式然后再求值。
因而在程序中,这两种形式等价。
当把取址运算符&应用于这两种等价的表示形式时,&a[i]和*(a+i)的含义也是相同的。
都是a+i是a之后第i个元素的地址。
一个用数组和下标实现的表达式可以等价的用指针和偏移量来实现。

希望有所帮助。

读书人网 >C语言

热点推荐