c语言,数组名作函数参数问题。

作者&投稿:郗婕 (若有异议请与网页底部的电邮联系)
C语言中关于数组名作为函数参数方面的问题~

不知道你说的第2,4,5语句对应的是什么。。。。
帮你解释为什么是1:
当你调用fun(a,b,s);
传进的参数实际上是:&a[0], &b[0], s变量的值(实际上也就是&a[0])
现在我们把fun的形参换个名字 fun(int *p1, int *p2, int *p3)
进入fun时 p3 = s ,即p3 = &a[0].
你调用malloc时返回的值是一个int*,实际上 p3 = malloc返回的新指针p4
*p3=*p1+*(p2++) 即 *p4=*p1+*(p2++);
看到错误了吗,p4并不是s,你算出来的值赋值到malloc返回的指针p4指向的内存了。
你想p3(即你的s)拿到计算的值,请把s=(int*)malloc(sizeof(int) );这句去掉。
另外malloc出来的内存是需要释放的,请调用free释放,不然程序不退出的情况下内存会占用。

白线处是函数定义,不是函数调用

这道题刚刚做到了,正确答案是c
牛客网大佬给出的解答,A,必须在主调函数中说明此数组的大小,不一定例如传递一个char类型的字符串,就不需要。所以A是错的

a是数组名,也就是数组的首地址,a+1就是a[1]的地址,等价于&a[1].前面加一个星号就是取该地址的值啦,也就是元素a[1]的值。

void
change(int
array[],int
n)相当于void
change(int
*array,int
n),第一个参数是个指针,如果是change(a[2],2)则第一个参数是个常数不是指针,由于数组名是常指针,所以改成change(a,2)就没问题了。

应为c语言的规则就是

先定义

然后才能分配空间

这个..因为其实是一个指针嘛..不指定的话..你就不知道边界了...
如果永远做++的话..那么数组会按照类型所占用的内存指下去..


c语言允许数组名作为函数调用的实参吗?
当然允许,有很多程序都是把数组名作为实参的。

C语言:用数组名作函数参数,函数调用时为什么形参数组名可以被赋值?
arr只是一个地址指针,他指向地址,并不是地址本身。可以这样理解,数组相当于一个个房间,地址相当于房间号,指针相当于服务员站在房间门口用手指着房间号,告诉你现在是这个房间被调用,arr+3相当于告诉服务员向后移动3个房间后指着新的房间,如果开始指向a【0】,现在就指向a【3】,

在c语言中怎么将数组直接作为函数的参数 比如 int f(int a[10]) 在...
要把数组作为函数的参数,在函数定义的时候,就要在参数列表设置指针,因为数组名就是数组的头指针,在调用时直接把数组名作为函数的参数就好了 比如 int fun(int *a){ \/\/...} int main(){ int a[10];int result=fun(a);return 0;} 这样就好了 通常为了在函数中确保访问数组不越界,在参数...

c语言:利用数组名作函数参数,实现双向数据传递
int x = 2 int y = F(x)函数F里如果出现x=3,那么回归后主程序里x还是2,因为递给函数的只是个拷贝 如果 int x[] = {2,3} int y = F(x)这时递进去的是数组首地址,所以在函数里如果出现x[0]=1,那么主程序里的x也会变成{1,3}, 因为虽然函数拿到的x是一个拷贝,但因为它是地址,...

c语言中数组元素做函数参数和数组名做函数参数有什么不同 求详细解释...
数组名代表数组在内存中的地址,所以数组名做参数传的是地址。数组元素做参数,得看数组的类型,具体传给形参的是数组元素的值。

数组名作为函数参数的,应该在主调函数和被调用函数分别定义数组,不能...
, i , a[i] );} func函数也可以这样写 void func1(int *p,int n)\/\/函数形参为指针 { int i;for( i=0;i<n;i++ )printf("p[%d]=%d\\n" , i , *(p+i) );} void main(){ int a[5]={1,2,3};func(a,3); \/\/数组名作参数 ,这是主调用函数 func1(a,3);} ...

c语言编程:用数组名作函数参数,编写一个对一维数组求平均值的函数,并在...
include <stdlib.h> include <string.h> float b(float arr[],int n); \/\/<<<少了函数声明 void main(){ float a[50];int i,n=0;for(i=0;getchar()!='\\n';i++){ scanf("%f",&a[i]);n++;} printf("平均值是:%f",b(a,n) ); \/\/<<<b这个函数传的是数组的首地址...

...元素作函数实参,求数组3个元素(实数)的立方和 2.数组名作函数...
sum=0; for(int i=0;i<3;i++) sum=sum+s[i]*s[i]*s[i]; return sum; } int main(){ double x[3]={3,5,7}; printf("数组元素做实参===%f\\n",f(x[0],x[1],x[2])); printf("数组名作参数===%f\\n",fa(x)); return 0; } ...

c语言题,数组名作参数不是可以改变值吗?为什么还是1
1.fun函数传递的s指针是拷贝的s的地址,(这个地址第2条修改,重新指向了别的内存区域。)2.在fun内部重新给s指向了另外的内存区域。s=(int*)malloc(sizeof(int));3.在fun内部修改s的值已经不是主函数中s的值。任何修改都影响不了主函数中s的值。4.只要把s=(int*)malloc(sizeof(int));...

c语言 为什么主函数调用函数average的实参是数组名score,而不是整个...
1、对于一维数组来说,数组作为函数参数传递,实际上传递了一个指向数组的指针,在c编译器中,当数组名作为函数参数时,在函数体内数组名自动退化为指针。此时调用函数时,相当于传址,而不是传值,会改变数组元素的值。例如:void fun(int a[]); 若在fun函数中有a[i]++;等语句,那么对应的数...

北票市17235998296: c语言中数组作为函数参数的问题. -
彘天除翳: E 数组作为参数不需要标示大小 A 数组参数在函数中要被隐式转换为一个常量指针在使用 F 定义数组值为int a[i] 这里的i应该是一个编译时期决定大小常量表达式.

北票市17235998296: 关于c语言中数组作为函数参数的函数之间调用问题 -
彘天除翳: 1、新建一个数组作为参数项目,如图所示: 2、添加一个array.c文件,如图所示: 3、包含stdio.h和stdlib.h头文件,如图所示: 4、输入main函数主体及返回值,如图所示: 5、定义一个数组arr,如图所示: 6、定义一个function函数,如图所示: 7、将数组作为参数传递给function函数,如图所示: 8、运行程序,输出结果,如图所示:

北票市17235998296: c语言编程:用数组名作函数参数,编写一个对一维数组求平均值的函数,并在主函数中调用它 -
彘天除翳: #include <stdio.h>#include <stdlib.h>#include <string.h> float b(float arr[],int n); //<<<<少了函数声明 void main() { float a[50]; int i,n=0; for(i=0;getchar()!='\n';i++) { scanf("%f",&a[i]); n++; } printf("平均值是:%f",b(a,n) ); //<<<<b这个函数...

北票市17235998296: c语言数组作为函数参数问题
彘天除翳: 不是没传进所有的数,,是你在循环时少加了一个括号.加上括号就好了, 你试试 int Maxdata(int data_max[200],int total_max) { int a,b; for(a=1;a<total_max;a++) { b=data_max[0]; //循环开始加括号 if(b<data_max[a]) b=data_max[a]; } //括号结束 ...

北票市17235998296: C语言中如何将二维数组作为函数的参数传递 -
彘天除翳: 在c语言中可以用二维数组作为实参或者形参. 1、函数中用二维数组作为形参,函数声明中可以指定所有维数的大小,也可以省略第1维的维数如:void f(int array[3][10]); //正确void f(int array[][10]); //正确上面的两种二维数组形参表示都是正...

北票市17235998296: C语言中数组名作为实参传给被调用的函数时,形参获得的是什么 -
彘天除翳: C语言中数组名作为实参传给被调用的函数时,形参获得的是数组的起始地址. 还是用例子说话吧. #include<stdio.h> int *arry(int *a) {int *b;b = a;int i; for(i=0;i<5;i++){printf("%d",a[i]);} return b; } int main() {int a[5] = {1,2,3,4,5};int *c;...

北票市17235998296: C语言中,数组名作为函数参数,属于什么传递,为什么?
彘天除翳: 地址,因为是把数组在内存的位置传进去,而在函数里对数组的修改,将会被保存

北票市17235998296: C语言中如何用数组名作形参 -
彘天除翳: 直接用指针就好了,方便,拿上面的例子来改就是: void str(char * b){printf("%s",b); }main(){char a[]="ssssssss";char*p=a;str(p); }

北票市17235998296: C语言 数组作为参数传递问题 -
彘天除翳: 不是写法的问题,可能你对数组的具体含义还不太清楚哈.一个一维数组的数组名是指向这个数组首地址的指针,比如:int a[3]={1,2,3}; printf("%d",*a); 输出:1 a就是指向这个数组的首地址的指针,当用:int *b; b=a+1;//a地址加1,指向下...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网