第1个回答 推荐于2018-02-24
C语言数组调用是传送地址调用。
为便于弄清函数原型和数组调用,把程序补充写成:
#include<stdio.h>
#include<stdlib.h>
void a(int x[2]){ x[0] = 11; x[1] = 12; };
void b(int x[], int n){
int i;
for (i=0;i<n;i++) x[i] = 2.0 * x[i];
}
void c(int x) { printf("%d\n",x); }
void main()
{
int array[]={1,2,3} ;
int k;
(void) a(array);
printf("%d %d %d\n",array[0],array[1],array[2]);
(void) b(array, 3);
printf("%d %d %d\n",array[0],array[1],array[2]);
k = (int) (&array)[2];
(void) c( k);
printf("%d %d %d\n",array[0],array[1],array[2]);
}
a(array); 调用,函数a 对调用数组前2个单元做了加工,第3个单元不做加工。所以输出结果 11,12,3
b(array,3); 调用,对array 3个单元做了加工,各乘2,
所以输出结果 22,24,6
c的调用是把array 的指针值拿来派用场,所以输出结果不变 22,24,6
如果a函数原型是 void a(int x),
调用(void) a(array[2]), 则是把数组第3个元素拿来加工。
因问题说得不清楚,只好猜测。本回答被提问者和网友采纳