精华内容
下载资源
问答
  • 传参规则: a.当二级指针作为函数形参时,能作为函数实参的是二级指针,指针...当指针数组作为函数形参时,能作为函数实参的是指针数组,二级指针,一级指针的地址 实例验证: #include <stdio.h> #includ...
    1. 传参规则:

    a.当二级指针作为函数形参时,能作为函数实参的是二级指针,指针数组,一级指针的地址
    b.当数组指针作为函数形参时,能作为函数实参的是二维数组,数组指针
    c.当二维数组作为函数形参时,能作为函数实参的是二维数组,数组指针
    d.当指针数组作为函数形参时,能作为函数实参的是指针数组,二级指针,一级指针的地址

    1. 实例验证:
    #include <stdio.h>
    #include <stdlib.h>
    
    void fun1(int **pp)
    {
        printf("fun1\n");
    }
    void fun2(int(*a_p)[5])
    {
        printf("fun2\n");
    }
    void fun3(int t_d_a[][5])
    {
        printf("fun3\n");
    }
    void fun4(int *p_a[5])
    {
        printf("fun4\n");
    }
    
    int main()
    {
        int *p_a[5];          //指针数组
        int **pp = NULL;      //二级指针
        int *p = NULL;        //一级指针
        int t_d_a[5][5];      //二维数组
        int a[5];             //一维数组
        int(*a_p)[5] = &a;    //数组指针
    
        fun1(p_a);
        fun1(pp);
        fun1(&p);
        //fun1(t_d_a);
        //fun1(a_p);
        printf("\n");
    
        //fun2(p_a);
        //fun2(pp);
        //fun2(&p);
        fun2(t_d_a);
        fun2(a_p);
        printf("\n");
    
        //fun3(p_a);
        //fun3(pp);
        //fun3(&p);
        fun3(t_d_a);
        fun3(a_p);
        printf("\n");
    
        fun4(p_a);
        fun4(pp);
        fun4(&p);
        //fun4(t_d_a);
        //fun4(a_p);
        printf("\n");
    
        system("pause");
        return 0;
    }
    

    以上代码我放开注释的任意一条语句,都会报错为形参与实参的类型不兼容。
    PS:调试环境为vs2013

    ---------------------------------------------------------------------------------自己的分析---------------------------------------------------------------------------------
      二维数组 **arr[3][3]**其实是包含三个一维数组的数组。所以arr[3][3]也可以用 *数组指针(arr)[3] 表示,但必须指明一维数组长度,即二维数组列数。

    展开全文
  • 指针数组函数形参

    千次阅读 2018-10-23 13:43:00
    在设计函数过程中,想要函数参数传入一个指针数组,多为字符串数组,在函数形参的设计上有两种思路,具体以下列两种应用场景为说明 一、字符串处理函数strsort 从程序设计角度来看,将多个字符串传递给函数处理时...

    在设计函数过程中,想要函数参数传入一个指针数组,多为字符串数组,在函数形参的设计上有两种思路,具体以下列两种应用场景为说明

    一、字符串处理函数strsort

    从程序设计角度来看,将多个字符串传递给函数处理时,因为传递的是一维数组,形参的定义比较简单。例如,函数strsort()可对多个字符串进行排序,函数头的定义形式如下:

    void  strsort(char *s[],int n)

     

    形参char *s[]为字符指针数组,将要处理的指针数组的首地址作为实参传入。形参int n表示要处理的字符串的数量。

    二、main函数形参

    C/C++语言中的main函数,经常带有参数argc,argv,如下: 

    int main(int argc, char** argv)
    int main(int argc, char* argv[])

     

    下面的程序演示argc和argv的使用:

    #include <stdio.h>
    
    int main(int argc, char ** argv)
    {
        int i;
        for (i=0; i < argc; i++)
            printf("Argument %d is %s.\n", i, argv[i]);
    
        return 0;
    }

     

    假如上述代码编译为hello.exe,那么运行

    hello.exe a b c d e

     

    将得到

    Argument 0 is hello.exe.
    Argument 1 is a.
    Argument 2 is b.
    Argument 3 is c.
    Argument 4 is d.
    Argument 5 is e.

     

    展开全文
  • 一维数组示例 见如下代码: #include<stdio.h> #include<stdlib.h> #include<string.h> void add(char *p, int len){ int i=0; printf("%c\n", p[len-1]); printf(“%d\n”, p[len-1]); //由...

    一维数组示例

    见如下代码:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    void add(char *p, int len){
    	int i=0;
    	printf("%c\n", p[len-1]);
    	printf(“%d\n”, p[len-1]);   //由这两行可以看出main函数中的gets()函数在输入字符串的时候会以\0(空字符)结尾
    	for(i=0; i<len-1; i++){     //所以在这里i可以设置为i<len-1, 因为数组下标是len-1的那个字符就是上面所讲的空字符
    		printf("%c", p[i]);
    	}
    }
    int main(){
    	char name[10];
    	gets(name);
    	int len;
    	len=strlen(name);
    	printf("主函数:%s\n", name);
    	add(&name[0], len); 
        //由于上面所定义的add(char *p, int l)函数中p为指针,所以在这里要传入数组的地址,而数组的地址只需传入数组的首地址即可,后面可通过add函数中for循环的p[i]来依次输出。(在C语言中用&来取变量地址)
        //注意:由于字符串长度有严格限制,所以在这里还需要传入一个int类型的变量len,以便于后续输出;
    	return 0;
    }
    
    

    二维数组示例

    二维数组地址的理解

    见如下代码:

    #include<stdio.h>
    #include<stdlib.h>
    
    int main(){
    	int i, j;
    	int chs[2][3]={'I', 'l', 'o', 'v', 'e', 'U'};
    	for(i=0; i<2; i++){
    		for(j=0; j<3; j++){
    			printf("%c ", chs[i][j]);
    		}
    	}
    	printf("\n");
    	for(i=0; i<2; i++){
    		for(j=0; j<3; j++){
    			printf("%p\n", &chs[i][j]); //在这里,我们输出数组中所有元素的地址
    		}
    	}
    	return 0;
    }
    

    输出结果如下:
    在这里插入图片描述

    二维数组示例测试

    由此我们可以发现二维数组其实就是一维数组的一个简单的变形,所以我们可以用同样的方法来把数组的首地址当作指针,以此来作为函数形参,见如下代码:

    #include<stdio.h>
    #include<stdlib.h>
    
    int main(){
    	int i, j;
    	char add(char *p);
    	char chs[2][3]={'I', 'l', 'o', 'v', 'e', 'U'};
    	add(&chs[0][0]);//这里与一维数组不同,需要输入具体的首地址,而将&chs[0][0]替换为&chs,是无法编译的
    	return 0;
    }
    
    char add(char *p){
    	printf("%c", p[5]);//在这里我们指定输出的是“U”
    	return 0;
    }
    

    输出结果如下:
    在这里插入图片描述
    总结:在最后总结一下以上的内容,二维数组只是一维数组的一个变形,本质是一样的,但在使用的时候会稍微有些不同。比如二维数组作为形参时,要求我们写的更加具体,输入首地址后接下来便和一维数组一样操作。

    用法

    通过指针我们可以访问内存地址,通过对内存的修改来对数组进行改变,这样就可以解决函数无法返回一个数组的问题,见如下代码:

    #include<stdio.h>
    #include<stdlib.h>
    
    int main(){
    	int i, j;
    	char add(char *p);
    	char chs[2][3]={'I', 'l', 'o', 'v', 'e', 'U'};
    	add(&chs[0][0]);
    	for(i=0; i<2; i++){
    		for(j=0; j<3; j++){
    			printf("%c ", chs[i][j]);
    		}
    	}
    	return 0;
    }
    
    char add(char *p){
    	char i;
    	i=p[5];
    	p[5]=p[0];
    	p[0]=i;
    	return 0;
    }
    

    输出结果如下:
    在这里插入图片描述
    本人初次写博客,觉得将注释写在代码内有助于理解,如有不足的地方,请多多指教。

    展开全文
  • 如下代码和结果 指针数据作为函数形参和实在的时候,形参指针p和...为什么这里实参指针n和形参指针p自身地址是不一样的,而上面用指针数据的时候,实参指针数组name和形参指针数组p是一样的。这里有什么区别吗?
  • 指针数组作为函数参数的传递

    千次阅读 2020-03-14 20:34:54
    指针数组作为函数参数的传递 ...了解了指针数组的本质后,想要将指针数组作为函数的参数进行传递就类似于一位普通数组的传递方法,将数组名作为数组的首元素地址进行实参传递,在形参接实参的时候要注意指针...

    指针数组作为函数参数的传递
    想了解指针数组作为函数参数传递,就必须清楚指针数组的概念,指针数组是一个一维数组,存放的是(int、char、short、long、double、float)+*的内容,也即数组中的每个元素存放的是一个地址。
    了解了指针数组的本质后,想要将指针数组作为函数的参数进行传递就类似于一位普通数组的传递方法,将数组名作为数组的首元素地址进行实参传递,在形参接实参的时候要注意指针数组的类型是二级指针,所以要用二级指针,要想在函数内访问指针数组的成员,用%s方式 ,后跟arr[i]的方式,arr[i]中存放的就是每个字符串的地址。
    代码如下:

    #include<stdio.h>
    void print_arr(char **buf, int n)
    {
    int i=0;
    for(i=0;i<n;i++)
    printf("%s\n",buf[i]);
    }

    int main(int argc, char *argv[])
    {
    char *buf[3]={“hehe”,“haha”,“lele”,NULL};
    int n=sizeof(buf)/sizeof(buf[0]);
    print_arr(buf,n);
    return 0;
    }

    展开全文
  • 数组作为函数形参

    2020-03-09 22:04:24
    数组作为函数形参会退化为指针变量 void sort_array(int a[10]); void sort_array(int a[10]); void sort_array(int *a); //以上三种形参是等价的,数组的方括号在函数形参中是无意义的,但是void sort_array...
  • 测试环境: win10 x86-64 gcc: x86_64-pc-cygwin...2)数组作为函数形参时将被转化为指向数组第一个元素的指针,无论是int a[10]还是int a[]形式的形参,在函数内部都是int *a形式指针 3)没有办法直接将数组本身...
  • 二维数组作为函数形参该如何传递

    千次阅读 2020-05-10 17:49:33
    今天在论坛上有朋友提问:声明函数如下void function(int** pInt),意图是想参数...如果要将一个二维数组作为形参,那么函数该怎么声明? 来看《C++ Primer》中给出的方法: 1. 数组作为形参 [cpp] view plain copy
  • 指针数组函数传递里的用法,一定是指针数组名做实参,指针数组名做形参么,还是可以实参指针,形参也是指针
  • 函数指针函数名、二维数组指针形参时的要注意的地方
  • 数组指针作为形参传递

    千次阅读 2019-04-17 00:02:59
    数组作为函数形参时,数组的地址可以用做函数调用的实参。 可以通过数组地址的传递,在函数内可以对该数组进行访问和修改。 eg: #include <stdio.h> #define SIZE 10 /* 形式1 */ void func_1(const char ...
  • 指针作为函数参数传递一维数组 C 语言中声明了一个数组TYPE array[n],则数组名称array 就有了两重含义: 第一,它代表整个数组,它的类型是TYPE[n]; 第二,它是一个常量指针,该指针的类型是TYPE*,该指针指向的...
  • 一维数组作为函数形参

    千次阅读 2018-04-25 14:53:53
    转载: ... ...例子来源于《剑指Offer》,我对书上例子做了修改,让其可以运行。...  data1是一个数组,sizeof(data1)是...和其他使用数组的代码一样,以数组作为形参函数也必须确保使用数组时不会越界。
  • 如果想通过一个一维数组作为函数的参数,就必须声明函数形式参数,使用以下三种方式与所有三个声明方法之一产生类似的结果,因为每一种方式告诉编译器,一个整数指针将会要被接收。类似的方式,可以使用多维数组形式...
  • 二维数组作为函数形参

    千次阅读 2018-04-25 15:12:13
    转载:... 在用二维数组作为参数传递时容易出现Segmention Error。这是因为不能正确为二维数组中元素寻址的问题,正确的方法如下:[cpp] view plaincopy #include <stdlib.
  • 主要给大家介绍了关于C语言中二维数组作为函数参数来传递的三种方法,文中通过示例代码介绍的非常详细,对大家学习或者使用C语言有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • 【C】指针数组作main函数形参

    千次阅读 2018-10-21 15:20:32
    指针数组的重要应用是作为main函数形参,在以往的程序中,main函数的第一行一般形式为: int main()或 int main(void) 括号中为空或为“void”,表示main函数没有参数,调用main函数时不必给出参数。 这...
  • 时间:2017/06/01 20:49 指向一维、二维数组指针 例:int vector[10], *vp=vector;...②为何不合法,vp的初始化是有问题的,因为vector并不是一个指向整型的指针,而是指向一个指向整型数组指针
  • 一个变量有地址,一个数组也有地址,不同的是数组包含若干个元素,也对应...通过指针变量指向一个一维 int 类型数组元素: int a[5]={0,1,2,3,4}; //定义一个数组名为 a 长度为5 的int类型变量 int *pa; //定义一...
  • 这不是一个数组的声明,因为没有指定数组的大小,但是有两种情况会出现这种写法。 (1)int a[]={1, 2}; 这个写法等价于 int a[2]={1,2}; 系统会自动计算大小。 (2)在形参时,如void func(int a[]); 这个写法等价于...
  • 还是有差别的 虽然大多数时候都可以相互用最大的差别就是指针可以改变,可以通过指针...举个例子:(分别作为形参) int num[10], *p; p = num;//此时p指向数组的第一个元素 在主函数里调用两个函数 1 Sum(num);
  • 数组指针作为函数参数第五章中我们介绍过用数组作为函数参数的情况。数组名代表数组的起始地址,用数组名作参数传递的是地址。既然地址可以作为函数参数,那么指向数组元素的指针变量当然也可以作为函数参数。例...
  • 2.c++形参传入数组指针时,需要传入数组的长度 #include <iostream> using namespace std; int* getSortedArray(int *array,int length);//函数声明,排序后返回数组 bool sortedOK(int *array,int length);//...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 71,017
精华内容 28,406
关键字:

指针数组作为函数形参