关于c语言 当实参是数组名 形参是指针变量时

#include<stdio.h>
int main()
{ void input (int *);
int number[10];
int i;
input(number);
for(i=0;i<10;i++)
printf("%d",number[i]);
return 0;
}
void input(int * number)
{
int i;
printf("input 10 numbers:");
for(i=0;i<10;i++)//这两句不太明白
scanf("%d",&number[i]);//在这的number不应该是指针变量吗
}
intput()的最后两句不应该是for(i=0;i<10;i++,number++)
scanf("%d",*number);

在C语言,数组无论作为参数还是返回值,都是以指针形式返回或者传递的。在数组中,数组名字代表的是数组第1个元素的地址。比如如下数组。

int a[10] = {1,2,3,4,5,6};

数组名a,实际上相当于&a[0]。所以,当实参是数组名,形参是指针变量时,只要保证数据类型一致即可传递。如下面的示例代码:

#include <stdio.h>
void f(int *p, int size) {
for (int inx=0; inx!=size; ++inx) printf("%d\t",p[inx]);
printf("\n");
}
int main()
{
int a[4] = {1,2,3,4};
f(a,4);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-30
题目是对的,scanf接收的是地址,所以要用&number[i],传送第i个数的地址,也可以用number+i

另外:
for(i=0;i<10;i++,number++)
scanf("%d",*number);是错的,不应该有*
for(i=0;i<10;i++,number++)
scanf("%d",number);是对的
这里的number是地址

也就是说你只要明确scanf接收地址而不是实体就可以了,不管用什么方法,只要把地址传过去就对了追问

那在 input中 number是指针变量 还是指针常量

追答

变量

追问

我看了一遍 说number是指针变量 但是在input中number[i]表示的是number的的I个元素 请问是这个关系吗?

追答

对,对于一个指针,后面加上[]就表示实体
*(number+i)和number[i]等价

本回答被提问者采纳
第2个回答  2012-05-30
O(∩_∩)O~number不是指针变量,它是一个地址常量,因为main函数中你定义的是数组“int number[10];”呀~它可以当指针来用~但是它是常量,因此“number++;”这条语句是非法的(你见过“常量=常量+1”吗?没有吧~)因此“*number”的写法也不对……(*^__^*) 嘻嘻……
第3个回答  2012-05-30
不是你这样的,下面的input函数的number虽然是指针变量,但是可以等同于number[];所以还是储存在number[i]里面,且还要用个循环储存。我们也是刚学完C语言,有些自己懂,但是描述不出来,希望能给你带来点帮助。
第4个回答  2012-05-30
写成scanf("%d",number+i);也可以。number是个常量的指针变量,是数组名
你后边写的应是scanf("%d",number);
相似回答