精华内容
下载资源
问答
  • C语言传递数组函数方式
    2022-02-21 20:32:49

    目录

    方式 1

    方式 2

    方式 3

    实例


    如果想要在函数中传递一个一维数组作为参数,必须以下面三种方式来声明函数形式参数,这三种声明方式的结果是一样的,因为每种方式都会告诉编译器将要接收一个整型指针。同样地,也可以传递一个多维数组作为形式参数。

    方式 1

    形式参数是一个指针:

    void myFunction(int *param)
    {
    .
    .
    .
    }

    方式 2

    形式参数是一个已定义大小的数组:

    void myFunction(int param[10])
    {
    .
    .
    .
    }

    方式 3

    形式参数是一个未定义大小的数组:

    void myFunction(int param[])
    {
    .
    .
    .
    }

    实例

    现在,让我们来看下面这个实例,它把数组作为参数,同时还传递了另一个参数,根据所传的参数,会返回数组中各元素的平均值:

    #include <stdio.h>
     
    /* 函数声明 */
    double getAverage(int arr[], int size);
     
    int main ()
    {
       /* 带有 5 个元素的整型数组 */
       int balance[5] = {1000, 2, 3, 17, 50};
       double avg;
     
       /* 传递一个指向数组的指针作为参数 */
       avg = getAverage( balance, 5 ) ;
     
       /* 输出返回值 */
       printf( "平均值是: %f ", avg );
        
       return 0;
    }
     
    double getAverage(int arr[], int size)
    {
      int    i;
      double avg;
      double sum=0;
     
      for (i = 0; i < size; ++i)
      {
        sum += arr[i];
      }
     
      avg = sum / size;
     
      return avg;
    }

    当上面的代码被编译和执行时,它会产生下列结果:

    平均值是: 214.400000

    可以看到,就函数而言,数组的长度是无关紧要的,因为 C 不会对形式参数执行边界检查。

    更多相关内容
  • 动态申请内存和释放内存 多维数组 动态定义数组
  • 数组参数属于指针参数,指针参数即时传址参数(或叫引用参数), 如果想在函数中修改参数的值, 这是唯一的途径.如果把数组当作参数, 不管愿意与否, 它就是指针, 指向第一个值的指针.1. 数组参数就是指向第一个元素的...

    最佳答案

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

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

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

    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]);

    }

    }

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

    展开全文
  • C语言 函数 数组

    千次阅读 2018-01-25 22:01:26
    (1)static在修饰main和普通函数中的变量时,都是修饰局部变量,为什么普通函数中的变量可以保持,main中变量不保持? static修饰局部变量时,变量存放在栈区,生命周期随着语句块执行结束而结束。但使用static...

    (1)static在修饰main和普通函数中的变量时,都是修饰局部变量,为什么普通函数中的变量可以保持,main中变量不保持?

    static修饰局部变量时,变量存放在栈区,生命周期随着语句块执行结束而结束。但使用static修饰变量存放在静态数据区,其生命周期持续到程序结束。

    以上有个概念,就是语句块结束和程序结束是不同的,对static修饰的普通函数中的变量而言,语句块结束但是程序并没有结束,有可能接着调用该函数,所以static变量可以保持。但是对于main中的static变量而言,语句块结束,程序也就结束了,static变量也被释放了,所以不会出现保持的情况

    (2)如何避免引用时数组和指针的混淆?

    char a[]; //定义一个a数组

    char *a;//定义一个指针

    extern char *a;//系统无法识别是指针还是数组

    所以应该extern char a[];

    (3)类型标识符和函数名称的区别?

    类型标识符和函数名共称为函数头,类型标识符指明了函数的类型,函数类型就是函数返回值的类型。函数名则主要由函数的功能命名,当然也看编程人员的习惯。如:void add()其中void就是类型标识符,说明这个说明该函数无参。

    (4)使用指针变量作为函数参数会改变指针变量吗?

    不会,函数调用遵循“值传递”原则,实参有固定数值,而形参这接受实参传递的数值,之后对形参的操作不会影响实参。但是作为指针变量的函数参数可能对改变指针所指向的变量的值。

    (5)哪几种表达式作为函数参数可能会改变实参?

    首先,我们要了解什么情况下形参会改变实参,改变变量一定要改变它的内存单元的地址,什么情况下实参会把地址给形参呢,取地址或者数组名,它们代表了所在地址,这时候实参和形参会共用一段内存单元。所以这时候改变形参就会把实参改变。

    (6)C语言中的函数参数的传递有哪几种形式?

    值传递和地址传递,值传递会给被传递变量一个内存空间,把传递值复制到这个内存空间里面。所以被传递变量改变不会改变传递变量。但是地址传递,会把传递变量的地址给被传递变量,被传递变量的改变会导致传递变量的改变。

    (7)如何编写多个返回值的C语言函数?

    一,利用全局变量,首先,在全局定义变量,然后在函数中调用,因为是全局变量,不会因为被调函数的结束而结束。在主函数中还是这些变量,不会改变。二,传递数组指针,把返回值定义为数组,用指针访问。三,结构体指针,把返回值集合为结构体,用指针访问。三个方法其中关键在于如何跨过空间去访问它,全局变量和指针就是不错的方法。

    (8)数组的下标都是从0开始吗?数组元素一定要符合数值要求吗?

    都是,不一定。比如a[20]虽然是20个元素的要求,但是内部不一定是20个,可能是比20个少。

    (9)函数的声明和定义应该在程序的那些位置?

    函数的定义可以在程序的任何一个地方,但是如果函数的定义在主函数后面,声明必须在主函数前面,因为你必须让主函数知道它使用的这个函数是声明。

    (10)使用下标和指针的数组名都可以访问元素,能个更好?

    指针更好,x=a[],x=*p,前者要把数据类型和大小,地址都给x,但是后者仅把数组地址给x就可以了,使用指针更快,占用资源更少。


    展开全文
  • 函数通过数组作为参数 如果想通过一个一维数组作为函数的参数,就必须声明函数形式参数,使用以下三种方式与所有三个声明方法之一产生类似的结果,因为每一种方式告诉编译器,一个整数指针将会要被接收。类似的方式...
  • 整理的一些关于C语言的练习题,题目答案都有,需要的可以下载看一下
  • C语言数组函数

    千次阅读 2020-11-26 17:29:09
    1. 数组 1.1 由例子引入数组 1.2 数组的定义 1.3 数组举例 1.4 二维数组 2. 函数 2.1 由例子引入函数 2.2 函数的定义和使用 2.3 函数的参数和变量 2.3.1 函数声明 2.3.2 参数传递 2.3.3本地变量/局部变量...

    目录

    1. 数组

    1.1 由例子引入数组

    1.2 数组的定义

    1.3 数组举例

    1.4 二维数组

    2. 函数

    2.1 由例子引入函数

    2.2 函数的定义和使用

    2.3 函数的参数和变量

    2.3.1 函数声明

    2.3.2 参数传递 

      2.3.3 本地变量/局部变量/自动变量(作用域和声明周期) 

     2.4 其他细节 


    这个课程内容的安排真的是很有条理,由易到难,由浅入深。比如讲解函数和数组之前,先通过例子说明为什么要引入它们,是为了方便解决某些问题的。而不是开篇就是数组是怎么定义的,函数是怎么定义的,怎么使用它们等等。有一条线贯穿课程的始终,在学习选择语句的时候这种感觉最明显。首先是判断两个数的大小引入if-else语句,接着判断三个数的大小引入嵌套if-else,然后计算分段函数引入级联if-else,对级联if-else的改进又引出switch-case语句。

    但是过来人和我说,后面再看自己记录的这些判断素数的例子就会觉得很傻,我现在仅仅是菜鸟,还不是新手,跟他们老手肯定没法比。但是这个过程总要经历的,只能自己默默努力吧,争取早点通过新手营。fighting!

    1. 数组

    1.1 由例子引入数组

    例子1:计算平均数,不需要记录输入的每一个数

    #include <stdio.h>
    
    int main()
    {
    	double sum = 0;
    	int x;
        int cnt = 0;
    	scanf("%d",&x);
    	while(x != -1){
    		sum += x;
    		cnt++;
    		scanf("%d",&x);
    	}
    	if(cnt > 0){
    		printf("%f\n",sum / cnt);
    	}
    	
     }

    例子2:写一个程序计算用户输入的数字的平均数,并输出所有大于平均数的数。 

    #include <stdio.h>
    
    int main()
    {
    	double sum = 0;
    	int x;
    	int cnt = 0;
    	int number[100];//定义数组 
    	scanf("%d",&x);
    	while(x != -1){
    		//对数组中的元素进行赋值 
    		number[cnt] = x;//位置不能错 
    		//debug
    		{
    			int i;
    			printf("%d\t",cnt);
    			for(i = 0; i <= cnt; i++){
    				printf("%d\t",number[i]);
    			}
    			printf("\n");
    		}
    		//
    		//number[cnt] = x;放在这里的话,显示就会出问题 
    		sum += x;
    		cnt++;
    		scanf("%d",&x);
    	}
    	if(cnt > 0){
    		printf("%f\n",sum / cnt );
    		int i;
    		for(i = 0; i < cnt; i++){
    			if(number[i] > sum / cnt){//使用数组中的元素 
    				printf("%d\n",number[i]);//遍历数组 
    			}
    		}
    	}
    	return 0;
     } 

    存在安全隐患,数组只有100这么大,但是在输入的过程中并没有判断。解决方法:1. 判断cnt的值,等于99之后就不再输入。

    2. 利用C99的特性,数组的个数可以用变量

    1.2 数组的定义

    1.3 数组举例

    #include <stdio.h>
    
    int main()
    {
    	const int number = 10;//const只有C99才能用 
    	int x;
    	int count[number];//定义数组 
    	int i;
    	for(i = 0; i < number; i++){//数组初始化 
    		count[i] = 0;
    	}
    	scanf("%d",&x);
    	while(x != -1){
    		if(x >= 0 && x <= 9){
    			count[x]++;//数组参与运算 
    		}
    		scanf("%d",&x);
    	}
    	for(i = 0;i < number;i++){
    		printf("%d:%d\n",i,count[i]);//遍历数组输出 
    	}
    	return 0;
     } 

    1.4 二维数组

    初始化

    例子 

    2. 函数

    2.1 由例子引入函数

    例子1:素数求和

    #include <stdio.h>
    int isPrime(int i);
    int main()
    {
    	int m,n;
    	int sum = 0;
    	int cnt = 0;
    	int i;
    	scanf("%d %d",&m,&n);
    	if(m==1) m=2;
    	for(i = m; i <= n; i++){
    		if(isPrime(i)){
    			sum += i;
    			cnt++;
    		}
    	}
    	printf("%d %d\n",cnt,sum);
    	return 0;
    }
    
    int isPrime(int i)
    {
    	int ret = 1;//不事先赋初值的话,程序就不对了 
    	int k;
    	for(k = 2; k < i-1; k++){
    		if(i % k == 0){
    			ret = 0;
    			break;
    		}
    	}
    	return ret;
    }

    例子2:求和函数 

    // 求和函数 
    #include <stdio.h>
    int Sum(int i,int j);
    int main()
    {
    	
    	Sum(1,10);
    	Sum(20,30);
    	Sum(35,45);
    	return 0;
    }
    
    
    void Sum(int begin,int end)
    {
    	int sum = 0;
    	int i;
    	for(i = begin; i <= end; i++){
    		sum +=i;
    	}
    	printf("%d到%d的和是%d\n",begin,end,sum);
    
    }

    2.2 函数的定义和使用

    2.3 函数的参数和变量

    2.3.1 函数声明

    2.3.2 参数传递 

     

     

      2.3.3 本地变量/局部变量/自动变量(作用域和声明周期) 

     

     2.4 其他细节 

     

    展开全文
  • #include #include #include #include #include #include #include #include #include #include // 字符数组的传参 里面会通过\0来区分void mybufshow(char*pbuf){int i;for(i=0;i{printf("pbuf is %c\n",pbuf[i]);}...
  • C语言自定义数组函数

    千次阅读 2021-05-31 10:27:48
    自定义数组函数 strcmp #include<stdio.h> int main() { int mystrcmp(char a[], char b[]); char str1[] = "123", str2[] = "1234"; int z; z = mystrcmp(str1, str2); printf("%d\n", z); return...
  • 如何用c语言return数组函数

    千次阅读 2021-02-05 14:42:50
    对于一维数组来说 就像下面这个例子,是这样一个题 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。...
  • C语言 数组长度函数

    2021-01-12 11:56:47
    http://topic.csdn.net/t/20051128/15/4423431.html1.用宏是可以的这样写#define ArraySize(ARR) (sizeof(ARR) / sizeof(ARR[0]))楼上的楼上要加括号的。#include #define ArraySize(ARR) (sizeof(ARR)/sizeof(ARR[0...
  • 主要介绍了C语言树状数组的实例详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
  • // 输出了 x 的值,x 的值是 主调函数 arr 数组的首地址 } void change ( int x [ ] ) { int tmp = x [ 0 ] ; x [ 0 ] = x [ 1 ] ; x [ 1 ] = tmp ; } int max ( const int x ...
  • 所以,整型的数组长度,必须与数组名一同传递到子函数才可以! 追问: char b[15] = {'a', 'b', 'c', 'e', 'a', 'a', 'b', 'c', 'e', '\0'}; 这个好像也不可以,求完整的解决方案。 追答: 你这个也有结束符啊...
  • C语言函数返回数组

    2021-05-20 19:44:14
    C编程语言不允许返回整个数组作为函数的参数。但是,您也可以返回一个指针,没有索引到一个数组中指定数组的名称。你将学习在下一章节中,这样你就可以跳过这一章,直到你理解这个概念在C中的指针的指针如果你想从一...
  • C语言数组4种定义格式

    千次阅读 2020-12-29 11:48:01
    以一维数组为例 **1、**int a[10]; **2、**int a[]={1,2,3}; **3、**int a[10]={1,2}; **4、**int *a=new int [10]; 注意:方法4是C++ 第一次写博客,以后慢慢补充。
  • 关于C语言函数返回一个数组c语言中函数不能直接返回一个数组,但是可以用其他方式实现类似功能,不过需要注意:1、该数组不能是返回函数的局部变量数组,因为局部变量数组在退出函数后会被释放。可以是全局变量,...
  • c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下: 方法一, 形参给出第二维的长度。 例如: #include void func(int n, char str[ ][5] ) { int i; for(i = 0; i < n; i++) printf("/nstr...
  • C语言函数数组地址参数

    千次阅读 2018-12-20 17:08:56
    main()函数里写成ReadReg(Addr + i, buf[i]); 出错。 buf[i]前需加取地址符&amp; #include "stdio.h" int i; int Addr;, int buf[16] = {0}; int ReadReg(int a, int * b) { ... ... } void...
  • NULL 博文链接:https://touch-2011.iteye.com/blog/1038925
  • c语言 处理数组函数

    千次阅读 2020-10-18 19:42:12
    处理数组函数 显示数组内的所有元素 使数组内的每个元素都乘以2.5 // arf.c -- 处理数组函数 #include<stdio.h> #define SIZE 5 void show_array(const double ar[], int n); void mult_array(double ar...
  • C语言数组函数中的传参

    千次阅读 2021-03-25 22:34:58
    c语言中有时需要数组作为函数的参数进行传参,那么应该怎样传递呢? 先看一下整数作为函数参数时的传参 #include <stdio.h> #include <stdlib.h> int Add(int a,int b) { int c; c = a + b; ...
  • 数组的大小计算: int a[3]; //一个整型数占用空间4个字节,3个占用空间12个字节 char b[3]; //一个char型占用空间1个字节,三个占用空间3个字节 printf("a数组的大小是:%d\n",sizeof(a)); printf("b数组的大小...
  • C语言动态数组

    千次阅读 2021-06-07 17:42:25
    中文名C语言动态数组释义相对于静态数组而言根据随程序需要而重新指定大小定义声明时没有确定数组大小的数组C语言动态数组词目释义编辑动态数组,是相对于静态数组而言。静态数组的长度是预先定义好的,在整个程序中...
  • #include<stdio.h> void reading(int * pa,int m) { int i; for(i=0; i<m; i++) scanf("%d ",pa+i);//pa+i→&pa[i] } void print(int *pa,int m) { int i; for(i=0; i<...int mai
  • 参考题4:编写函数void appendArray(int data1[], int n1, int data2[], int n2)接收传入的数组1和数组长度,数组2和数组长度,功能是将传入的数组2元素复制到数组1的后面。在main函数中定义初始化data1和data2,...
  • c语言获取数组长度的函数

    千次阅读 2020-10-09 18:23:33
    通过宏定义才能实现调取函数直接获取长度的效果,放到函数中不行。 具体原因请看:https://blog.csdn.net/qq_39516859/article/details/82464346 根据上文做出改进,代码: #include<stdio.h> #define ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 320,228
精华内容 128,091
关键字:

c语言函数数组