精华内容
下载资源
问答
  • c语言函数传递数组

    2014-10-31 12:51:00
    1、传递数组,打印不出来 #include <stdio.h> void solve() { printf("%d",x[0]); } int main() { int i; for(i=0;i<n;i++) { scanf("%d",&x[i]); ...

    1、传递数组,打印不出来

    #include <stdio.h>
    void solve()
    {        
      printf("%d",x[0]);
    }
    
    int main()
    {      
        int i;
        for(i=0;i<n;i++)
        {
            scanf("%d",&x[i]);   
            printf("%d\n",x[i]);     
        }
        solve();  
        
        return 0;
    }

    [Error] error: `x' undeclared (first use in this function)

    或者是这个错误for each function it appears in.)

    ------------------------------------------------

    解决方案一:设置全局变量

    #include <stdio.h>
    int x[100];
    void solve()
    {        
      printf("%d",x[0]);
    }
    int main()
    {      
        int i,n;
        puts("输入数组长度");
        scanf("%d",&n);
        
        for(i=0;i<n;i++)
        {
            scanf("%d",&x[i]);   
            printf("%d\n",x[i]);     
        }
        solve();      
        return 0;
    }

    解决方案二:用指针传递首地址

    传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址。void func(int array[10])void func(int array[])void func(int *array)所以以上三种函数声明完全等同。
    #include <stdio.h>
    
    void solve(int *x) //前面的int也不能省。 
    {        
      printf("%d",x[1]);
    }
    int main()
    {      
        int i,n;
          puts("输入数组长度");
        scanf("%d",&n);
         int x[n];  
        
        for(i=0;i<n;i++)
        {
              printf("输入第%d个数",i+1);
            scanf("%d",&x[i]);   
            printf("%d\n",x[i]);     
        }
        solve();    //这里的x也不能省  
        return 0;
    }

     

    数组给一个函数,常用的是可把数组的首地址传给函数。
    即相当于是指针的应用
    fun(int array[10][])
    fun(int array[])
    fun(int *array)

    三种调用方法
    完整版:输入的数组全部打印出来
    #include <stdio.h>
    int i,n;
    
    void solve(int *x) //前面的int也不能省。 
    {  
      for(i=0;i<n;i++)
       {
          printf("%d",x[i]);    
       }      
    
    }
    int main()
    {      
       
          puts("输入数组长度");
        scanf("%d",&n);
         int x[n];  
        
        for(i=0;i<n;i++)
        {
              printf("输入第%d个数",i+1);
            scanf("%d",&x[i]);   
            printf("%d\n",x[i]);     
        }
        solve(x);    //这里的x也不能省  
        return 0;
    }

     另外一个例子:

    #include "stdio.h"
    //指针:数组的传递 
    void int_set(int *vc,int no,int val)
    {
        int i;
        for(i=0;i<no;i++)
        {
            vc[i]=val;        
        }
    }
    int main()
    {
        int i;
        int ary[]={1,2,3,4,5};
        int_set(ary,5,1);
        for(i=0;i<5;i++)
        printf("ary[%d]=%d\n",i,ary[i]);
        return 0;
        
    }
        

     

    转载于:https://www.cnblogs.com/bluewelkin/p/4064767.html

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

    最佳答案

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

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

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

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

    }

    }

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

    展开全文
  • 题目 // 创建一个数组, ...我们首先完成对各个函数项目的完成,三个函数采用地址传递的方式 主函数里面完成各个操作的选择 我们必须先初始化数组,然后才能进行清空和倒置数组 代码 #define _CRT_SE...

    题目

    // 创建一个数组,
    // 实现函数init()初始化数组、
    // 实现empty()清空数组、
    // 实现reverse()函数完成数组元素的逆置。
    // 要求:自己设计函数的参数,返回值。

    代码效果

    在这里插入图片描述

    在这里插入图片描述

    分析

    我们首先完成对各个函数项目的完成,三个函数采用地址传递的方式
    主函数里面完成各个操作的选择
    我们必须先初始化数组,然后才能进行清空和倒置数组

    代码

    #define  _CRT_SECURE_NO_WARNINGS
    #define  N 5
    #include <stdio.h>
    #include <stdlib.h>
    void showmenu() {
    	printf("-----1.初始化数组-----\n");
    	printf("-----2.数组倒置-------\n");
    	printf("-----3.清空数组-------\n");
    	printf("-----4.退出程序-------\n");
    	printf("----请输入你的选择----\n");
    }
    void  init(int* arr){
    	int i;
    	printf("请初始化这个数组:\n");
    	for(i = 0;i<N;i++) {
    		scanf("%d",&arr[i]);
    	}
    	printf("初始化成功!\n");
    }
    void empty(int* arr) {
    	int i;
    	printf("清空数组\n");
    	for(i= 0;i<N;i++){
    		arr[i] = NULL;
    		printf("arr[%d]的值为:\n",i,arr[i]);
    	}	
    }
    void reverse(int* arr) {
    	int temp;
    	int i;
    	for(i = 0;i<N/2;i++) {
    		temp = arr[i];
    		arr[i] = arr[N-1-i];
    		arr[N-1-i] = temp;
    	}
    	printf("数组倒置:\n");
    	for(i = 0;i<N;i++) {
    		printf("%d ",arr[i]);
    	}
    	printf("\n");
    }
    int main() {
    	int arr[N];
    	int choose;
    	while(1) {
    		showmenu();
    		printf("请输入你的选择:\n");
    		scanf ("%d",&choose);
    		if(choose == 2||choose == 3){
    		     printf("请先初始化数组!");
    			 printf("\n");
    		}	
    		else if(choose == 1)
    		{
    	         init (arr);
    			 printf("请输入你接下来的操作:\n");
    			 scanf ("%d",&choose);
    			 if(choose == 2){
    				 reverse (arr);
    				 printf("请输入你接下来的操作:\n");
    				 scanf ("%d",&choose);
    				 if(choose == 3)
    					 empty(arr);
    				 else if(choose == 4) {
    					 printf("退出程序!\n");
    					 break;
    				 }
    			 }
    			 else if(choose == 3) {
    				 empty(arr);
    			 }
    			 else if(choose == 4) {
    				 printf("退出程序!\n");
    				 break;
    		     }
    		}
    		else if(choose == 4) {
    			printf("退出程序!\n");
    			break;
    		}
    		else {
    			printf("你的输入有误重新输入!");
    			printf("\n");	
    		}
    	}
    	return 0 ;
    }
    
    	
    
    展开全文
  • c语言函数传递数组

    千次阅读 2020-04-11 19:23:43
    可以定义一个能接受数组作为函数参数的函数,然后调用这个函数时,可以将一个实际的数组传递给它。 数组作为函数参数时,其定义方式有下列三种: /*函数名param后跟一个空的[],说明param可以接受一个数组*/ void ...

    可以定义一个能接受数组作为函数参数的函数,然后调用这个函数时,可以将一个实际的数组传递给它。

    数组作为函数参数时,其定义方式有下列三种:

    /*函数名param后跟一个空的[],说明param可以接受一个数组*/
    void myFunction(int param[]) {
       /*函数体 代码*/ 
    }
    /*函数名param后跟一个非空的[size],说明param可以接受一个大小为size的数组*/
    void myFunction(int param[]) {
       /*函数体 代码*/ 
    }
    /*函数名param前有一个*,说明param可以接受一个数组*/
    void myFunction(int *param) {
       /*函数体 代码*/ 
    }
    

    上述3个函数中,实际上上面2个函数都会被编译器转化为第3个函数,也就是说“数组作为函数的形参”实际上是一个指针类型的形参,即将来可以接受一个数组名表示的数组的起始地址!而并不是将一个数组的所有元素传给一个函数,仅仅传递的是一个小小的指针变量。

    比如,我们可定义下面的函数,第一个参数表示可以接受一个传入的数组

    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;
    }
    

    然后我们可以调用这个数组:

    #include <stdio.h>  
    /* 函数声明,表示存在这种格式的函数getAverage, 其第一个参数可以是一个int型数组,第二个参数是这个数组的大小 */
    double getAverage(int arr[], int size);
    
    int main () {
    
       /* 5个元素的int整型数组 */
       int balance[5] = {1000, 2, 3, 17, 50};
       double avg;
    
       /* 将数组名(实际是数组对应内存块的起始地址)传给getAverage函数 */
       avg = getAverage( balance, 5 ) ;
     
       /* 输出getAverage的返回值 */
       printf( "Average value is: %f ", avg );
        
       return 0;
    }
    

    也可以传递多维数组(如二维数组)给函数,在定义接受这种多维数组的函数参数时,和接受一维数组的函数参数一样,其第一维的大小也可以不指定。同样,如果我们省略第一维对应的方括号[],则要在参数名前加一个‘’。 并用圆括号括起来 “(参数名)”。

    #include <stdio.h> 
    #include <stdlib.h>  
    const int ROW = 2;
    const int COLUMN = 3;
    
    /*这2个函数的定义在main函数的调用语句后面,所以要先声明(说明)函数的规范*/
    void fill_array(int (*pm)[COLUMN],int row);
    void display(int m[][COLUMN],int row);
     
    int main()
    {
        int i,j;
        int m[ROW][COLUMN];
     
        /* 修改数组元素的值 */
        fill_array(m,ROW);
     
        /* 显示数组的元素 */
        display(m,ROW);
     
        return 0;
    }
     
    void fill_array(int (*pm)[COLUMN],int row)
    {
     
        int i,j;
        printf("Please fill the array's content:\n");
        /* 修改数组元素的值 */
        for(i = 0; i < row; i++)
        {
            for(j = 0; j < COLUMN; j++)
            {
                printf("\nm[%d][%d]:",i,j);
                scanf("%d",&pm[i][j]);
            }
        }
     
    }
     
    void display(int m[][COLUMN],int row)
    {
        int i,j;
        /* 显示数组的元素 */
        printf("Array's content:\n");
     
        for(i = 0; i < row; i++)
        {
            for(j = 0; j < COLUMN; j++)
            {
                printf("%d\t",m[i][j]);
            }
            printf("\n");
        }
     
    }
    

    执行程序后的输出:

    Please fill the array's content:
     
    m[0][0]:1
     
    m[0][1]:2
     
    m[0][2]:3
     
    m[1][0]:4
     
    m[1][1]:5
     
    m[1][2]:6
    Array's content:
    1       2       3
    4       5       6
    
    展开全文
  • // test.txt 50 13 124 – void hi ( int *b, FILE... 我对结果感到很困惑,因为在’hi’函数中我从i = 0指定数组的开始,这意味着它存储从[0]开始的值.但似乎将1而不是0放在一边是以某种方式将值放在一边.为什么会这样?
  • 关于C语言函数返回数组的问题

    万次阅读 2016-11-29 23:03:52
    关于C语言函数返回一个数组 c语言中函数不能直接返回一个数组,但是可以用其他方式实现类似功能,不过需要注意: 1、该数组不能是返回函数的局部变量数组,因为局部变量数组在退出函数后会被释放。 可以是全局变量,...
  • 关于C语言函数返回一个数组c语言中函数不能直接返回一个数组,但是可以用其他方式实现类似功能,不过需要注意:1、该数组不能是返回函数的局部变量数组,因为局部变量数组在退出函数后会被释放。可以是全局变量,...
  • 本博文为半摘记性质,收集整理自菜鸟教程、《二级C》及其他互联网资料 —— 本文要点: 1. 函数的定义以及调用 2. 一维数组 3. 二维数组 4. 字符数组与字符串
  • 题目:定义一个函数,使用二维数组作为传入参数,在主函数中输入4×4的二维数组,调用已定义的函数,把该矩阵传入,在主函数中输出结果。函数功能:使二维数组中两条对角线上的元素均为1,其余元素均为0。 解: int ...
  • 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...
  • 调用结果代码片段#include <stdio.h>// 函数定义声明 double getAvg( int arr[], int size );void main () { // 声明并初始化 - 一个带有 5 个元素的整型数组 int balance[5] = { 1024, 512, 256, 128, 64 }; ...
  • 转载文章,关于C语言数组作为值传递得两种方式。这里得关键就是数组名就是一个指针常量。首先抛结论:1:C语言中,当一维数组函数参数时,编译器总是把它解析成一个指向其首元素的指针。2:实际传递数组大小与...
  • C语言 函数返回数组和指针区别

    千次阅读 2017-09-14 10:42:32
    建议使用把数组作为函数的形参传递进去,在调用函数的主函数声明数组,在使用完后释放数组,参考: http://www.cnblogs.com/yangxi/archive/2011/09/18/2180759.html 5. 思考   在理解程序在内存中的存储...
  • /* 定义一个指针变量p,说明它是一个指向一个包含4个 整型变量一维数组的指针 */ int n; /* 定义形式参数n为整形 */ { int i; /* 定义用于循环的变量i */ for (i=0;i;i++ ) /* 这里循环4次用于打印一个同学的4门课...
  • python的for循环效率极低,计算速度也慢,比c/c++就慢多了,就a[i]...c语言中代码,编译成Ctype.dll了 float *trans_image_test(int raw_data[]) { static float image_8bit[10]; for (int j = 0; j<10; j = j + 2
  • C语言结构体及函数传递数组參数演示样例 注:makeSphere()函数返回Sphere结构体,main函数中。调用makeSphere()函数,传递的第一个參数为数组,传递的数组作为指针。 ...
  • c语言中用函数传递数组的两个方法

    千次阅读 2015-04-03 16:45:15
    #include  #define GetLen(arr) sizeof(arr)/sizeof(int) //使用这种方式得到数组的...//缺点:每次都要传递5*4 20个字节的数组长度的数组形参  void f1(int a[]){   int i=0;   int len=GetLen(a)
  • 【问题】C语言中,关于如何获得一个,当做参数传递函数内的一个数组的大小。之前以为是可以通过类似于:sizeof(b) / sizeof(b[0])的,去获得参数中的数组的大小而定。【解决过程】1后来经过实际测试,说明自己的...
  • c语言中,定义数组后可以用sizeof命令获得数组的长度【可容纳元素个数】,通过传递数组名参数到子函数中,以获得数组长度是不可行的。c语言中,定义数组后可以用sizeof命令获得数组的长度(可容纳元素个数)如:{int ...
  • 转置二维数组的实例代码,探究二维数组作为参数的传递问题#include#define N 3int array[N][N];void main(){//在主函数内声明被调函数void convert(int array[][3]);int i,j;printf("输入数组:\n");for(j=0;jfor(i=0...
  • C语言二维数组作为函数参数传递

    万次阅读 多人点赞 2018-06-07 21:43:37
    二维数组作为函数的参数,实参可以直接使用二维数组名,在被调用函数中可以定义形参所有维数的大小,也可以省略以为大小的说明。例如: void find(char a[3][10]); void find (char a[ ][10]); 也可以使用数组...
  • C++ 向函数传递数组

    千次阅读 2017-10-14 16:38:55
    C语言中不能向函数传递数组,但是C++中是可以的。这样就方便了许多 C语言函数操作数组: C例1:C语言 通过指针访问一维数组,二维数组,三维数组。 C例2:C语言 使用指针遍历二维数组 /** C++使用数组作为...
  • 注:makeSphere()函数返回Sphere结构体,main函数中,调用makeSphere()函数传递的第一个参数为数组传递数组作为指针。
  • C语言如果给函数传递二维数组作为参数 问题的产生 先看一个传递二维数组的例子: #include <stdio.h> void foo(int a[][], int m, int n) { int i = 1; int j = 1; printf("a[%d][%d]=%d\n", i, j, a[i][j...
  • 因为C语言发明的初衷是替换汇编语言,要知道你用不同指令集的机器就要用不同的汇编语言。。。(此处省略800字议论文)我们想一想,当我们声明定义一个数组时,定义了数组的哪些int array[10] = {0};从上面的代码中我们...
  • C语言程序设计教案 章节名称 数组作为函数参数传递 授课类型 理论 实验 ?理实一体 实训 实习 班级 地点 周次 星期 节次 授课进度 ?符合 超前 滞后 ?符合 超前 滞后 ?符合 超前 滞后 教学目标 知识目标 1.掌握数组...

空空如也

空空如也

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

c语言函数传递数组

c语言 订阅