首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2013-03-14 
各位看看这个面试题,小弟困惑中......#include stdio.hvoid add(int array[])int main(int argc, char

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


#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个元素的地址。
一个用数组和下标实现的表达式可以等价的用指针和偏移量来实现。

希望有所帮助。

热点排行