精华内容
下载资源
问答
  • 最佳答案数组只能通过指针传递,不能通过值传递数组参数属于指针参数,指针参数即时传址参数(或叫引用参数), 如果想在函数中修改参数的值, 这是唯一的途径.如果把数组当作参数, 不管愿意与否, 它就是指针, 指向第...

    最佳答案

    数组只能通过指针传递,不能通过值传递。

    数组参数属于指针参数,指针参数即时传址参数(或叫引用参数), 如果想在函数中修改参数的值, 这是唯一的途径.

    如果把数组当作参数, 不管愿意与否, 它就是指针, 指向第一个值的指针.

    1. 数组参数就是指向第一个元素的指针: #include

    void getArr(int p[], int si);

    int main(void)

    {

    int ns[] = {1,2,3,4,5};

    getArr(ns, sizeof(ns)/sizeof(ns[0]));

    getchar();

    return 0;

    }

    void getArr(int p[], int si) {

    int i;

    for (i = 0; i < si; i++) {

    printf("%d\n", p[i]);

    }

    }

    2. 干脆直接声明为指针: #include

    void getArr(int *p, int si);

    int main(void)

    {

    int ns[] = {1,2,3,4,5};

    getArr(ns, sizeof(ns)/sizeof(ns[0]));

    getchar();

    return 0;

    }

    void getArr(int *p, int si) {

    int i;

    for (i = 0; i < si; i++) {

    printf("%d\n", p[i]);

    }

    }

    3. 即使你在形参中指定维数也不起作用: #include

    void getArr(int p[2], int si);

    int main(void)

    {

    int ns[] = {1,2,3,4,5};

    getArr(ns, sizeof(ns)/sizeof(ns[0]));

    getchar();

    return 0;

    }

    void getArr(int p[2], int si) {

    int i;

    for (i = 0; i < si; i++) {

    printf("%d\n", p[i]);

    }

    }

    4. 既然是指针, 其值就有被修改的可能: #include

    void getArr(int p[], int si);

    int main(void)

    {

    int ns[] = {1,2,3,4,5};

    size_t i;

    getArr(ns, sizeof(ns)/sizeof(ns[0]));

    for (i = 0; i < sizeof(ns)/sizeof(ns[0]); i++) {

    printf("%d\n", *(ns+i));

    }

    getchar();

    return 0;

    }

    void getArr(int p[], int si) {

    int i;

    for (i = 0; i < si; i++) {

    p[i]++;

    }

    }

    5. 如果是字符数组, 它自己能判断数组尾界: #include

    void getArr(char p[]);

    int main(void)

    {

    char ns[] = "ABCDEFG";

    getArr(ns);

    getchar();

    return 0;

    }

    void getArr(char p[]) {

    int i;

    for (i = 0; p[i]; i++) {

    printf("%c: %d\n", p[i], p[i]);

    }

    }

    最佳答案由网友  夺命薯条  提供

    展开全文
  • 经常忘记数组作为子函数参数进行传递函数声明格式,索性写一篇博文记录一下。 例如以下代码块: 其中*nSendByte作为数组进行传递。在读取数组中特定位置的数值时采用语句: S0BUF = *(nSendByte + i);//i代表第几...

    经常忘记数组作为子函数参数进行传递的函数声明格式,索性写一篇博文记录一下。
    例如以下代码块:
    其中*nSendByte作为数组进行传递。在读取数组中特定位置的数值时采用语句:
    S0BUF = *(nSendByte + i);//i代表第几个数值。

    		void UART0_Send_NByte(unsigned char n,unsigned char *nSendByte)  
    		{
    				unsigned char i = 0;
    				for(i = 0; i < n; i++)
    				{
    					S0BUF = *(nSendByte + i);
    					while(!f_uart0_tx_ok);																				//等待发送完成
    					f_uart0_tx_ok = 0;
    				}		
    		}
    

    调用方式举例如下:LED_VALUE_BUF为数组名称

    UART0_Send_NByte(LED_VALUE_BUF[1],LED_VALUE_BUF);
    
    展开全文
  • C语言数组名作为函数参数

    千次阅读 2021-02-10 14:09:05
    数组名作为函数参数传递时,会将数组整个传递给目标函数 int main(){ int import(),returnNum; int num[10]={1,2,3,4,5}; returnNum= import(num); printf("%d\n",returnNum ); return 0; } //函数类型不指定...

    数组名作为函数参数传递时,会将数组整个传递给目标函数

    int main(){
    	int import(),returnNum;//函数声明
    	//int import(int a[10])亦可
    	int num[10]={1,2,3,4,5};
    	returnNum= import(num);
    	//函数调用,并把返回值赋值给returnNum
    	printf("%d\n",returnNum );
    	return 0;
    }
    
    //函数类型不指定,则默认为int型
    int import(int a[10]){
    	for (int i = 0; i < 10; ++i)
    	{
    		printf("%d\n",a[i] );
    	}
    	return 999;
    }
    
    • 数组名作为函数参数调用,在主调函数与被调用函数中,都应重新定义一次数组
    • 实参数组与形参数组类型应一致
    • 在被调用函数中指定了数组大小,实际上不起任何作用,C语言编译系统并不检查形参数组大小,只是将实参数组的首元素的地址传给形参数组名。形参数组名获得了实参数组的首元素的地址,数组名代表数组的首元素的地址,形参数组首元素和实参数组首元素具有同一地址,它们共占同一存储单元
    • 在内存中,数组是按行存放的

    多维数组名作为函数参数,如一维数组类似

    int main(){
    	int apologize();
    	int a[2][4]={{0,0,0,0},{1,2,3,4}};
    	apologize(a);
    }
    
    int apologize(int a[][4]){
    	printf("%d\n",a[1][0]);//1
    	return 999;
    }
    

    当数组名作为函数参数调用时所进行的传递,是地址的传递,类似于指针

    #include <stdio.h>
    
    int main()
    {
    	int compare(int a[2][3]);
    	int str[2][3]={{0,1,2},{3,4,5}};
    	compare(str);
    	return 0;
    }
    
    int compare(int a[][3]){
    	printf("%d\n",a[1][1] );//输出4
    }
    
    • 需注意一点的是,数组名为常量,不可进行赋值改变地址,指针类型变量,可以不断赋值改变所指向地址常量
    展开全文
  • c语言数组传递

    千次阅读 2018-02-26 19:03:25
    转自:http://blog.csdn.net/xgmiao/article/details/9570825 点击打开链接数...假设C语言对数组采用传值调用(对实参作一份拷贝,传递给被调用函数函数不能修改实际实参值,而只能改变其拷贝),然后如果拷贝整个...

    转自:http://blog.csdn.net/xgmiao/article/details/9570825 点击打开链接

    数组作为函数实参:

    C语言中数组作为函数实参时,编译器总是将其解析为指向数组首元素地址的指针(地址调用)

    原因:我们知道C语言函数的调用有传值和传地址调用。假设C语言对数组采用传值调用(对实参作一份拷贝,传递给被调用函数,函数不能修改实际实参值,而只能改变其拷贝),然后如果拷贝整个数组,则在时间和空间上开销都非常大。而对于函数,只要知道实参数组的首元素的地址,照样可以访问整个数组,所以采用传址调用效率更高。

    注意的一点是对于函数来说,其接受的是数组首元素的地址,所以它是并不知道数组的大小的。

    一维数组作函数实参:

    [cpp]  view plain copy
    1. #include <stdio.h>  
    2.   
    3. void fun(char *p)  
    4. {  
    5.     printf("%d\n",sizeof(p));  
    6.     char c = p[3];  
    7. }  
    8.   
    9. void fun(char a[10])  
    10. {  
    11.     printf("%d\n",sizeof(a));  
    12.     char c = a[3];  
    13. }  
    14.   
    15. void fun(char a[])  
    16. {  
    17.     printf("%d\n",sizeof(a));  
    18.     char c = a[3];  
    19. }  
    20.   
    21. void main(int argc,char* argv[])  
    22. {  
    23.     char a[100] = "jhalfalsdfa1111";  
    24.     fun(a);  
    25.   
    26.     getchar();  
    27. }  

    以上三个函数为一维数组作为实参的函数常用的定义方式。三个函数输出的结果都是4,说明了传给函数就是一个地址,特别对于第二种定义,不要以为该函数只能接收大小为10的数组,实际实参数组的大小与函数形参数组的大小是没有任何关系的。最好采用第三种方式定义,因为第一种方式,我们也可以认为该函数的实参为指针,而第二种方式可能会误认为该函数只能接收大小为10的数组。

    二维数组作为函数实参:

    错误认识:既然一维数组作为参数相当与一个指针,那二维数组作为参数就相当于一个二级指针。

    正确认识:二维数组名作为参数时相当于一个数组指针(指向一维数组的指针)

    [cpp]  view plain copy
    1. #include <stdio.h>  
    2.   
    3. void fun(int a[4][3])  
    4. {  
    5.   
    6. }  
    7.   
    8. void fun(int (*p)[3])  
    9. {  
    10.       
    11. }  
    12.   
    13. void fun(int a[][3])  
    14. {  
    15.       
    16. }  
    17.   
    18. void main(int argc,char* argv[])  
    19. {  
    20.     int a[2][3] = {1,2,3,4,5,6};  
    21.     fun(a);  
    22. }  

    以上二维数组作为函数实参的函数常用的定义方式。函数定义中,数组第二维的数目必须要与实参第二维的数目一样,第一维的数目无所谓。因为二维数组名做实参时,编译器是将其解析为一个指向大小为第二维的数组的指针。

    展开全文
  • c中将数组传递给函数 如何在C中将数组传递给函数 (How to pass Array to a Function in C) Whenever we need to pass a list of elements as argument to any function in C language, it is prefered to do so ...
  • C语言 数组数组函数(2018.11.24)

    千次阅读 2018-11-24 23:29:09
    指针函数: int x(int x,int y,...一维数组 同类型、有序的数据集合,在内存中占据一段连续的储存单元 命名规则与其他变量一样 注: 其他变量命名规则: 1、只能用字母、数字、下划线 2、开头只能用字母、下划线 ...
  • C基于C语言数组名作函数参数问题的分析研究强伟,杨战海(延安大学陕西延安716000)摘要:在研究数组名作函数参数时,提出参数形式的一致性问题和数据的传递方向问题。综合分析参数的匹配原则、数据的传递规律...
  • C语言数组作为函数参数

    万次阅读 多人点赞 2019-02-24 20:24:59
    数组元素就是变量,与普通变量没有区别,将数组元素传送形参,实现单向的值传递。 #include &lt;stdio.h&gt; float max(float x,float y){ if(x &gt; y) return x; else return y; } int main()...
  • C语言传递数组给函数的方式

    千次阅读 2014-03-29 15:46:43
    1.传递一维数组 int a[10] 给函数,会隐式转换成指向数组首元素的指针,实质上传递的是指向数组首元素的指针(存放的值是数组首元素的地址,指向的数据是数组首元素)。 在使用a值时,可以把a看成是一个指向首元素的...
  • 数组传递给函数

    2017-12-29 15:33:16
    传递数组给函数的3个原则 1.函数调用时只需传递数组名。 2.在函数定义中,形参的类型必须与数组的相同,数组的大小不必指定。 3.函数原型必须定义为参数是一个数组。 #include #include...
  • 要注意数组的下标都是从0开始的,在做题时还要注意定义数组的大小,数组过小,在程序中会造成越界导致崩溃(多次崩溃深有体触),二维数组注意第二维度的长度绝对不能省略,若要把一个数组传递给一个函数,只要使用不...
  • C语言数组作为函数参数 文章目录一:数组元素作为函数的实参二:数组名作为函数的实参关于数组作为函数参数调用的讨论关于函数定义的参数表的讨论获取二维数组的行和列更高维数组作为函数参数同二维数组类似参考文档...
  • C语言函数的参数传递主要有两种,一种为值传递,可以了理解为传递了一个副本,传递之后副本无论如何改变均不会影响到原来的变量,安全性高,但是子函数只能通过return来实现与原函数的通信;另一种为地址传递,包括...
  •   C语言数组是一系列数据的集合,无法通过参数将它们一次性传递函数内部,如果数组作为函数的参数,必须传递数组指针。 void func(int *p, int n) //对数组进行冒泡排序 { int temp; for(i = 0; i < n-1;...
  • c语言中有时需要数组作为函数的参数进行传参,那么应该怎样传递呢? 先看一下整数作为函数参数时的传参 #include <stdio.h> #include <stdlib.h> int Add(int a,int b) { int c; c = a + b; ...
  • 数组作为参数传递给函数和将指向数组中第一个元素的指针传递给函数是完全等价的。将数组作为参数传递给函数时可以采用值传递和地址传递两种方式,前者需要完整地复制初始数组,但比较安全;后者的速度要快
  • 数组作为函数的参数传递时,数组名会退化为指针 */ /** 运行结果: sizeof(acWelcome):30 strlen(acWelcome):19 sizeof(acWelcome):4 strlen(acWelcome):19 请按任意键继续. . . */ int main(int argc, char *...
  • 转载文章,关于C语言数组作为值传递得两种方式。这里得关键就是数组名就是一个指针常量。首先抛结论:1:C语言中,当一维数组函数...注意看数组是怎么传递给函数的。正确的写法1:解释说明:编译器把array解析...
  • C语言中,一维数组,做函数参数,实际上传递的是数组元素的首地址,可以是数组形式,也可以是指针形式,如Invertal(int p,int len)等价于Invertal(int p[],int len),编译器不检查数组长度;形参数组和实参数组占用...
  • 如果想把一个数组名参数传递给函数,正确的函数形参应该是怎样的?它是应该声明为一个指针还是一个数组? 调用函数时实际传递的是一个指针,所以函数的形参实际上是一个指针,但为了使程序员新手更容易上手一些,...
  • (四):数组作为参数传递给函数时,不可以通过sizeof得到数组的大小 (五):指针比带下标的数组名访问元素更高效 (六):不能将另外一个地址赋一个数组名 (七):array_name是指向数组中第一个元素的指针,&...
  • C语言数组当参数传递

    万次阅读 多人点赞 2018-01-29 19:57:23
    在学习C语言的过程中遇到数组作为参数传递的问题 一维数组:#include int test2(int a[]){ for(int i=0;i;i++){ printf("%d",a[i]); } } int main(){ int a[5] = {1,2,3,4,5},*p; p = a; test2(a); } ...
  • C语言数组函数

    2013-08-03 00:11:40
    数组:具有相同数据类型数据的有序集合  1、具有相同数据类型  2、数据的集合  3、有序的 数组的分类:  1、一维数组  2、多维数组(二维数组) 一维数组的声明:  数据类型 数组名[常量]; 数组元素:...
  • /* 定义一个指针变量p,说明它是一个指向一个包含4个 整型变量一维数组的指针 */ int n; /* 定义形式参数n为整形 */ { int i; /* 定义用于循环的变量i */ for (i=0;i;i++ ) /* 这里循环4次用于打印一个同学的4门课...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 81,911
精华内容 32,764
关键字:

c语言数组传递给函数

c语言 订阅