C语言数组作为实参传递的是数组的首地址,但是以下程序为什么输出的是数组的值而非地址

#include<stdio.h>

void ShowMember(int iMember); /*声明函数*/

int main()
{
int iCount[10]; /*定义一个整型的数组*/
int i; /*定义整型变量,用于循环*/

for(i=0;i<10;i++) /*进行赋值循环*/
{
iCount[i]=i;
}

for(i=0;i<10;i++) /*循环操作*/
{
ShowMember(iCount[i]); /*执行输出函数操作*/
}
return 0;
}

void ShowMember(int iMember) /*函数定义*/
{
printf("Show the member is%d\n",iMember); /*输出数据*/
}

第1个回答  2013-10-09
这是C的一个机制吧,传递的是地址,然后取得的是值=L=。你要获得地址的话得用&取值操作符
第2个回答  2013-10-09
ShowMember函数定义中它的输入不是数组参数,而是一个int,所以它处理就是按照int来处理
第3个回答  2013-10-09
数组定义没搞清楚:

int iMember = iCount[i]

赋值的是下标为 i 元素的值,你可以用在子函数中 用
void ShowMember(int *iMember)

然后输出指针试试追问

我的目的不是要输出地址,只是跟学到的感觉有些出入。数组作为实参传过去的是首地址,是地址,但是为什么处理的是它的值?这点搞不清楚……

追答

那现在告诉你原因,
iCount[i]是地址,

这么理解,比如该数组元素为编号为DXS66的老师,他叫纪晓岚;
你把他赋给指针变量时,指针变量获得的是 DXS66 这个编号,也就是地址;

你把他赋给整形变量时,整形变量获得的是 纪晓岚 这个名字,也就是值;

这个是数组元素的2中用法,C语法本来就是这样定义的。

追问

谢谢了,虽然还没搞清楚,我再仔细想想,很感谢!

本回答被提问者采纳
第4个回答  2013-10-09
是数组名作为参数传递是数组的首地址追问

嗯,传递的是数组的地址,不是首地址,我记错了。数组名的是指向首地址的指针,不是地址哦

追答

哈哈 你一定要记住 数组名是个地址而非指针。随着你对C的了解你会明白的。

追问

……谢谢挺耐心的,呵呵

相似回答