精华内容
下载资源
问答
  • 用指针引用二维数组元素 C语言 指针引用二维数组 为什么
    2021-05-21 06:42:09

    导航:网站首页 >

    用指针引用二维数组元素 C语言 指针引用二维数组 为什么

    用指针引用二维数组元素 C语言 指针引用二维数组 为什么

    相关问题:

    匿名网友:

    a 是数组首地址,等于 &a[0][0].

    *p 声明里是指针。语句里 *p 是 指针指向的值。 语句里 p 是地址.

    *p 是1个星号的指针,可以让它指向1维数组,也可以让有序地它指向2维数的各元素。

    int a[行][列]; a[j][i] 数组元素排列 是:

    第一行 的 第1列,第二列,第三列....

    第二行 的 第1列,第二列,第三列....

    第三行 的 第1列,第二列,第三列....

    2维数可以看成1维数组,排成1字长蛇阵:第一行 的 第1列,第二列,第三列..;

    第二行 的 第1列,第二列,第三列....;。。。。直到最后一行最后一列。

    #define row 3

    #define col 4

    int a[row][col]; // 某一元素: a[j][i]

    int *p,i,j;

    排成1字长蛇阵后,一维下标,可以用二维 下标计算: j*col + i.

    某一元素: a[j][i] 的 数值 就是 * (p+j*col+i);

    ----

    写出完整程序,依次输出所有元素,对比:

    #include

    main()

    {

    #define row 3

    #define col 4

    int a[row][col] = { 0,1,2,3,4,5,6,7,8,9,10,11};

    int *p;

    int i,j;

    p=&a[0][0];

    for (j=0;j

    for (i=0;i

    printf("\n");

    }

    printf("===========\n");

    for (j=0;j

    for (i=0;i

    printf("\n");

    }

    return 0;

    }

    ======

    如果 是 int **p; 才有 *(*(p+i)+j))形式。

    对应 a[j][i], 指向的值 是 *(*(p+j) + i)

    匿名网友:

    1.用指针引用二维数组元素

    问:int a[][],*p; 如何用指针引用a[][]? p与a的区别是什么?(如:*(*...

    2.C语言 指针引用二维数组 为什么

    问:二维数组在内存里面也是线性排列的,为什么直接int *p=a;(a为一个二维...

    3.C语言调用二维数组元素时,能否用指针指向其中同一...

    答:指针的值一次只能指向一个地址,不能同时访问多个地址,但是可以通过指针的移位来依次访问二维数组同一行的多个元素。例如:*(*(arry+0) + 1)可以访问二维数组arry的第0行,第1列的元素

    4.用指针 调用二维数组里的元素 所用两个* 表示的意义

    问:我想问一下 用指针 调用二维数组里的元素 所用两个* 表示的意义 像:*(*...

    5.c语言二维数组用指针表示的问题

    问:#include void main() { int a[3][4]={1,3,5,7,9,11,13,15,17...

    6.C语言怎么用指针代替二维数组

    答:看你具体的应用,提供几个方法供参考: 1、一级指针 例: int a[M][N]; int *p = &a[0][0]; 相当于将二维数组当一维数组用,需要自己根据N的大小计算下标,使用却很灵活 2、指针数组 例: int a[M][N]; int *p[M]; for(int i=0; i

    7.求C语言高手指点:请问如何指针定义二维数组?? ...

    问:这几种方法逻辑上都好理解,但我就是在具体表达上面有很大问题,求高手...

    8.C语言 怎么用指针输出一个二维数组的全部值

    答:C语言的数组(不管多少维)在内存中都是线性储存的。所以用一级指针加偏移就可以访问所有元素。 举个例子,有一个10*10的二维数组a,这样就可以输出: int a[10][10];int *p = (int *)a;int i;for (i = 0; i < 10 * 10; i++)printf(%d, *(p + ...

    9.如何让指针指向二维数组?

    问:还有要怎么利用指针去引用二维数组中的元素

    10.假如我想用指向二维数组的指针来输入几串字符串,然...

    答:下面的例子告诉你想知道的问题: main() { char a[5][50]; char (*p)[30];//声明指向二维数组的指针 int i; p=a; for(i=1;i

    问题推荐

    更多相关内容
  • 用指针访问二维数组

    热门讨论 2022-04-08 21:30:18
    文章目录 前言 用指针访问二位数组 通过指针访问二维数组的不同形式 ==*a和a 是两个完全不同的概念:== ==为什么不能*p=a== 二维数组元素的访问的四种方式: 1、通过下标访问数组元素 2、通过数组首地址访问数组...


    前言

    如何理解二维数组?我们以二维的方式理解二维数组,他在存储时却是一维的。


    用指针访问二位数组

    例:int a[3] [4] = {1,3,5,7,9,11,13,15,17,19,21,23};

    a[0] [0]a[0] [1]a[0] [2]a[0] [3]
    a[1] [0]a[1] [1]a[1] [2]a[1] [3]
    a[2] [0]a[2] [1]a[2] [2]a[2] [3]

    我们想象的二维数组的存储方式:3行4列

    a[0] [0]
    a[0] [1]
    a[0] [2]
    a[0] [3]
    a[1] [0]
    a[1] [1]
    a[1] [2]
    a[1] [3]
    a[2] [0]
    a[2] [1]
    a[2] [2]
    a[2] [3]

    我们认为前四个是一个以a[0]为数组名的一位数组,共有四个int元素

    中间四个是名为a[1]的一维数组

    最后四个是名为a[2]的一维数组

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xvD4uspk-1649424643293)(C:\Users\17273\AppData\Roaming\Typora\typora-user-images\image-20220408195446474.png)]

    通过指针访问二维数组的不同形式

    在这里插入图片描述

    *a和a 是两个完全不同的概念:

    a看待这个数组认为这个数组是一维数组,它自身加一会转向下一个一维数组即a+1

    *a指向的是每个元素都是整数的一维数组所以就认为 *a+0 指向的就是整数,加一就是下一个整数

    为什么不能用*p=a

    int x,*p;
    double y,*q;
    p=&x;
    q=&y;
    p=q;//是错的
    //p是指向四个字节为存储单元的地址
    //q是指向八个字节为存储单元的地址
    //两者不可以等价
    

    二维数组元素的访问的四种方式:

    1、通过下标访问数组元素

    int a[3][4];
    for (int i=0; i<3; i++)
        for (int j=0; j<4; j++)
            a[i][j] = i+j;
    
    int a[3][4];
    for (int i=0; i<3; i++)
        for (int j=0; j<4 ;j++)
            *(*(a+i)+j)=i+j;
    

    2、通过数组首地址访问数组元素

    对于二维数组元素a[i] [j], “【】”实际上是变址运算符,即将元素a[i] [j]的存储地址转换为a[i] + j。

    3、通过指针访问数组元素(以一维数组的角度“看待”二维数组”)

    int a[3][4];
    int *p=&a[0][0];
    for (int i=0; i<3; i++)
        for(int j=0; j<4; j++)
            *(p++) = i+j;		//相当于*p=i+j;p++;
    

    在这里,指针p被定义为:“指向int的指针”,也就是说:p指针“认为”它指向的是一个一维数组,每个元素都是int型的,共有12个元素。

    4、通过指针访问数组(以二维数组的角度“看待”数组)

    int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
    int (*p)[4];		
    /*
    对p指针的理解:
    *p声明了p的指针。
    p是指向什么的指针呢?
    指向了一个包含了4个整数的一维数组
    */
    p=a;
    for(int i=0; i<3;i++)
    	for (int j=0;j < 4;j++)
            *(*(p+i)+j)=i+j;
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kABn2WMW-1649424643295)(C:\Users\17273\AppData\Roaming\Typora\typora-user-images\image-20220408203550957.png)]

    指针这样定义之后,==指针p将以和数组a完全相同的“视角”去看待二维数组。==也就是说,a可以怎么使用,p也可以同样怎么使用

    //例如:此处*(*(p+i)+j)替换为p[i][j],a[i][j],*(*(a+i)+j)都是等价的
    

    指向字符串的二维数组

    char *str[3]={"Red","Green","Blue"};//方括号的优先级要高于"*"优先级
    //意思是str是具有三个元素的数组,数组里面存储的是指向字符的指针
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WhhJAfk3-1649424643296)(C:\Users\17273\AppData\Roaming\Typora\typora-user-images\image-20220408204323760.png)]

    实例:学生成绩

    score数组中存放了3个学生4们功课的成绩

    通过调用average函数计算所有学生所有成绩的平均值

    通过调用search函数显示第n个学生4门功课的成绩。

    思路:

    需要定义一个二维数组score,每行存储一个学生的4们功课的成绩。有3行,则存储了3个学生的成绩。

    65707060
    80879081
    909910098

    当编写函数average计算所有学生成绩平均值的时候,可以用一维数组的角度去看待这个score数组,也就是说,“认为”这个数组有12个成绩,直接求和,在计算平均分就行了

    当编写函数search显示第n个学生的4门功课的时候,则使用二维数组的角度去看待这个score数组,也就是说,“认为”这个数组有3行,每行4个元素

    void average(float *p,int n)
    {
        //以一维数组的方式看待学生成绩
        float *p_end;
    	float sum=0,aver;
        p_end=p+n;
        for ( ; p<p_end;p++)
            sum=sum+(*p);
        aver=sum/n;
        printf("平均成绩为:%5.1f\n",aver);
    }
    
    void search(float (*p)[4],int n)//可以写成 float p[][4]
    {
        //以二维数组的方式看待学生成绩,视角与score相同
        int i;
        printf("第%d个学生的成绩为: ",n);
        for (i=0;i<4;i++)
            printf("%5.1f",*(*(p+n)+i));  //可以替换成p[n][i]
    }
    
    int main()
    {
        float score[3][4]={{65,67,70,60},{80,87,90,81},{90,99,100,98}};
        average(&score[0][0],12);		//可以替换成score[0],*(score+0)
        search(score,2);
        return 0;
    }
    

    思考 (如果看不懂,请回退往前再看)

    (1)同是给函数传递score二维数组,为什么average函数和search函数传参时采用了不同的方式?

    average(&score[0][0],12);		//可以替换成score[0],*(score+0)
    search(score,2);				//显示第二个学生的成绩
    

    二维数组作为函数的参数

    1、以一维数组的角度“看待”二维数组

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P2KFzj6W-1649424643296)(C:\Users\17273\AppData\Roaming\Typora\typora-user-images\image-20220408210509696.png)]

    2、以二维数组的角度“看待”一维数组

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hblYxFbm-1649424643297)(C:\Users\17273\AppData\Roaming\Typora\typora-user-images\image-20220408210627250.png)]


    课后练习

    题目描述:写一个inverse函数,此函数的功能是:将一个 3*4 的二维数组中的值按逆序重新存放。

    程序运行结果范例

    请输入 3*4 的二维数组:

    1 2 3 4

    5 6 7 8

    9 10 11 12

    逆序存放后的结果为:

    12 11 10 9

    8 7 6 5

    4 3 2 1

    提示:

    这个程序有多种实现思路,尝试使用两种方法实现

    答案

    方法一:用二维数组的方式看待程序:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AypqDO38-1649424659790)(C:\Users\17273\AppData\Roaming\Typora\typora-user-images\image-20220408211150882.png)]

    void inverse(int a[][N],int b[][N])
    {
        int i,j;
        for (i=0;i<M;i++)
            for (j=0;j<N;j++)
                b[M-i-1][N-j-1]=a[i][j]
    }
    
    int main()
    {
        int a[M][N],b[M][N];
        int i,j;
        printf("请输入 %d*%d 的二维数组:\n",M,N);
        for (i=0;i<M;i++)
            for (j=0;j<N;j++)
                scanf("%d",&a[i][j]);
        inverse(a,b);
        printf("逆序存放后的结果为:\n");
        for (i=0;i<M;i++)
        {
            for (j=0;j<N;j++)
                printf("%d\t",b[i][j]);
        }
    }
    

    方法二: 用一维数组的方式看待程序:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wbqZDO8I-1649424659791)(C:\Users\17273\AppData\Roaming\Typora\typora-user-images\image-20220408211921472.png)]

    void swap(int *p1,int *p2)
    {
        int tmp = *p1;
        *p1 = *p2;
        *p2 = tmp;
    }
    
    //以 int *a 这样的方式传参,使得在子程序中以一维的方式看待数组,
    //也就是说,把数组看成了一个具有 M*N 个元素的,每个元素都是 int 的数组
    void inverse(int *a,int n)
    {
        int *p,*q;
        for (p=a,q=a+n-1;p<=q;p++,q--)
        {
            swap(p,q);
        }
    }
    
    int main()
    {
        int a[M][N];
        int i,j;
        printf("请输入 %d * %d 的二维数组: \n");
        for (i=0;i<M;i++)
            for (j=0;j<M;j++)
                scanf("%d",&a[i][j]);
        inverse(&a[0][0],M*N);
        printf("逆序存放后的结果为: \n");
        for (i=0;i<M;i++)
        {
            for (j=0;j<N;j++)
                printf("%d\t",a[i][j]);
        	printf("\n");
        }
        return 0;
    }
    

    程序用到了M,N两个常量,这样的程序具有良好的灵活性。

    展开全文
  • C语言函数调用二维数组,指针问题

    千次阅读 2021-05-25 04:35:44
    话题:C语言函数调用二维数组,指针问题回答:正如楼下所言 int **p ,定义的p是一个指向int*型的指针int (*p)[1]是一个指向数组的指针 数度为1假如定义成 deal(int **p),传参数时要加类型转换: deal((int**)a);...

    话题:C语言函数调用二维数组,指针问题回答:正如楼下所言 int **p ,定义的p是一个指向int*型的指针int (*p)[1]是一个指向数组的指针 数度为1假如定义成 deal(int **p),传参数时要加类型转换: deal((int**)a);并且使用p时不能用下标,p[2][3]是错误的,因为不知道p指向的int*型的长度,无法编译成*(p+2*1+3)必须自己写成*(p+2*1+3)来调用假如定义成 deal(int (*p)[1])就不一样了,编译器就能知道p是一个指向长度为1的数组的指针那么p[2][3]就能编译成*(p+2*1+3)了总之,C语言是很灵活的,不同的定义方式配上不同的用法,都是能得到正确的结果的不知道这么说楼主明白了没?同样的还有多维数组对多维指针的问题,楼主可以自己类推一下

    参考回答:int **p是指向int*的指针,int(*p)[1] 是指向数组的指针话题:c语言中怎么用二维数组作为函数参数回答:C语言中 指针做函数参数传递二维数组有两种基本方法:1、传递“数组指针”#include void output( int (*pa)[3], int n ) 这个函数只能输出n行3列的二维数组{int i,j;for( i=;i#include void output( int *pa[], int row,int col ) 这个函数更通用,但调用前,要做好准备。{int i,j;for( i=;ilt;row;i++ ){for( j=;jlt;col;j++ )printf("%d ", pa[i][j] );printf("\n");}}void main(){int a[2][3]={{1,2,3},{4,5,6}};int i;int *pa[2];for( i=;ilt;2;i++ )pa[i]=a[i];output(pa, 2, 3);}话题:c语言 二维数组指针函数问题。回答:你定义的二维数组,数组名并不是一个int **类型的指针,而是一个int (* )[N]类型的指针,其中N是二维数组第2维的长度,如果还不懂可以追问我改成这样就可以了:#include话题:C语言问题,请问二维数组的函数参数是怎么传递的?回答:在形参是数组的情况下,只要是数组,无论维数,实际上在调用函数时,传给函数的将是一个数组的首,以及维数等相关也就是说,在函数执行过程中,并不会新开辟内存空间,而是形参实参共用同一段内存空间所以,在这种情况下,函数内部对数组进行修改,其值会返回给实参你的例中调用部分有问题,不能这样shuru(a[1][2])而是shuru(a)因为a[1][2]数组a中的一个元素,而且是越界的而a才是数组名

    参考回答:你好!关于二维数组传参问题,在调用的时候直接传数组指针即可,即:void main(){int a[1][2];shuru(a);shuchu(a);}函数形参有两种写法,可以写成void shuru(int (*array_num)[2]){} 或者void shuru(int array_num[][2]){}函数shuchu() 也是一样,望采纳,如有不明白请追问谢谢!话题:C语言怎么用指针替二维数组回答:设二维数组为typename a[M][N],则指向该数组的指针为typename (*p)[N] = a;这样就可以用p来替二维数组了。

    参考回答:展开全部 #includelt;stdio.hgt;void main(){int i,j;int a[3][3],*p=a[]; 相对于一维数组是一样的,a[]本身就是一个一维数组,不要写成*p=a,写成*p=a[][]也可以for(i=;ilt;3;i++)for(j=;jlt;3;j++)scanf("%d",a[i][j]);printf("%d\n",*(p+5)); 调用就直接加数字,该数字是lt;3*3的就行}话题:C语言怎么以二维数组作为参数传递的问题回答:考虑要把a作为参数传入到print中,那么print函数就要定义一个接收二维数组的参数,那么什么参数能接收二维数组呢。就是print(int (*newbuf)[3])然后newbuf的就是a的,然后newbuf[i][j]来访问每一个元素了有问题继续问哈,写的可

    参考回答:展开全部 考虑要把a作为参数传入到print中,那么print函数就要定义一个接收二维数组的参数,那么什么参数能接收二维数组呢。就是print(int (*newbuf)[3])然后newbuf的就是a的,然后newbuf[i][j]来访问每一个元素了有问题继续问哈,写的可能不太明白话题:c语言问题,用指针为一个二维数组赋值回答:pptr=arr;/p p其实你这样赋值也是可以的,是没有问题的。/p p因为arr是二维数组的数组名,它(arr)本身就这个二维数组的第行的。/p p问题关键不是出现在这里,而是在你程序的while循环语句中/p pwhile(scanf("%f", ptr+i)i!=)/p pi++;/p p你这样写是不对的,首先ptr指向的是一个,所以ptr+i也是一个,所以这里就不能用变址运算符""了。第二个问题是,i 从自加到6,这里面其实有了个数,明显超过了arr数组的长度,这样是不对的。这个循环还有一个问题就是,这本身就是一个不正常的循环(自己想想为什么)/p p下面是我帮你改改的码,希望对你会有帮助。/p p#includestdio.h/p pvoid main()/p p{/p pdouble arr[2][3];/p pdouble *ptr;/p pint i=;/p pptr=*arr; 把数组arr第行第列的赋给ptr,其作用与ptr=arr;相同,/p p 但不建议采用ptr=arr;这样的赋值 /p pprintf("Plese enter 2*3 numbers: \n");/p pfor(i=;i6;i++)/p pscanf("%lf",ptr+i); 注意不要将ptr+i 写成ptr+i 或(ptr+i),否则出错 /p pfor(i=;i6;i++)/p pprintf("%g ",*ptr++);/p pprintf("\n");/p p}/p p/p话题:C语言中指针引用二维数组元素的问题回答:二维数组名a是一个指向指针的指针。也是一个指针数组名,它含3个元素,a[]a[1],a[2]。虽然a存储的是该数组首元素的,但它指向的并不是一个变量,而是一个指针。应为a是一个指向指针的指针,它指向的是和自己存储的相同的指针,即a[],a[]是第一行一维数组的指针,可以指向具体变量。这下明白了吧,*(a+)它不是变量,她是指针,a指向a[],*(a+)就是a[].

    参考回答:呵呵,我也刚学到这个问题,和你分享一下吧,咋看之下,确实像你说的没错,但是这个“[]”运算符和“*()”运算符原来是一个意思的,是不是因为搬到二维数组就混淆了呀,我原来也是有同样的问题的。你看看哪,要是搬回一维数组的话,我们知道a[]与*(a+)是相等的.然后我们再回到二维数组讨论讨论,我认为既然a[][]是二维数组,(a+)怎么看也不可能是二维吧,所以再用“星号”*去取里边的值,换是你,你该怎么取呢?所以呢,它们是相同的应该没错才对,是不是?话题:c语言问题,用指针为一个二维数组赋值回答:pptr=arr;/p p其实你这样赋值也是可以的,是没有问题的。/p p因为arr是二维数组的数组名,它(arr)本身就这个二维数组的第行的。/p p问题关键不是出现在这里,而是在你程序的while循环语句中/p pwhile(scanf("%f", ptr+i)i!=)/p pi++;/p p你这样写是不对的,首先ptr指向的是一个,所以ptr+i也是一个,所以这里就不能用变址运算符""了。第二个问题是,i 从自加到6,这里面其实有了个数,明显超过了arr数组的长度,这样是不对的。这个循环还有一个问题就是,这本身就是一个不正常的循环(自己想想为什么)/p p下面是我帮你改改的码,希望对你会有帮助。/p p#includestdio.h/p pvoid main()/p p{/p pdouble arr[2][3];/p pdouble *ptr;/p pint i=;/p pptr=*arr; 把数组arr第行第列的赋给ptr,其作用与ptr=arr;相同,/p p 但不建议采用ptr=arr;这样的赋值 /p pprintf("Plese enter 2*3 numbers: \n");/p pfor(i=;i6;i++)/p pscanf("%lf",ptr+i); 注意不要将ptr+i 写成ptr+i 或(ptr+i),否则出错 /p pfor(i=;i6;i++)/p pprintf("%g ",*ptr++);/p pprintf("\n");/p p}/p p/p话题:c语言,指向二维数组的指针变量回答:先从存储的角度对二维数组作一个全面的了解。二维数组在内存中的存储,是按照先行后列依次存放的。从内存的角度看,可以这样说,二维数组其实就是一个一维数组,在内存中没有二维的概念。如果把二维数组的每一行看成一个整体,即看成一个数组中的一个元素,那么整个二维数组就是一个一维数组,它以每一行作为它的元素,这个应该很好理解。第一,来详细介绍二维数组与指针的。- 首先定义个二维数组 array[3][4],p 为指向数组的指针。若p=array[],此时p指向的是二维数组第一行的首,则 p+i 将指向array[]数组中的元素array[][i]。由以上所介绍的二维数组在内存中的存储方式可知,对数组中的任一元素array[i][j] ,其指针的形式为:p+i*N+j (N为每一行的长度)。 元素相应的指针表示法为:*(p+i*N+j) ,下标表示法为:p[i*N+j] 。For Example:array[4][3]={{1,2,3},{4,5,6},{,,},{1,11,12}}; int * p=array[]; 数组array有四个元素,分别为array[],array[1],array[2],array[3],每个元素为包含3个元素的一维数组,如array[]的3个元素为 array[][],array[][1],array[][2]。元素array[2][2]对应指针为:array+2*3+2,指针表示法为:*(array+2*3+2) , 下标表示法为:array[2*3+2] 。特别注意:虽然 array[] 与 array 都是数组首,但两者指向的对象不同,这点要非常明确。array[] 是一维数组的名字,它指向的是一维数组array[]的首,所以 *array[]与array[][]为同个值。而 array 是二维数组的名字,它指向的是所属元素的首,其每个元素为一个行数组。它是以‘行’来作为指针移动单位的,如array+i 指向的是第 i 行。对 array 进行 * 运算,得到的是一维数组 array[] 的首,所以 *array 与 array[] 为同个值。如果定义 int* p,p为指int类型的指针,指向int 类型,而不是。故以下作 :p=array[] (正确) ,p=array (错误) 。这点要非常注意。第二,看看如何用数组名作表示其中元素。对二维数组array ,array[] 由 array指向,故*array 与array[] 是相同的,依次类推可得 array[i] 由array+i 指向,*(array+i) 与array[i]是相同的。 因此,对于数组元素 array[i][j] ,用数组名表示为 *(*(array+i)+j) ,指向该元素的指针为 *(array+i)+j 。注意:数组名虽然是,但与指向数组的指针质不同。指针变量可以随时改变其所指向对象,而数组名不可以,一旦被定义,就不能通过赋值使其指向另外一个数组,但是在Ja中则可以。第三,顺便了解一下不太常用的‘行数组指针’。对于二维数组array[4][3],与int* p 。二维数组名array 不能直接赋值给p。原因前面已讲过,两只的对象质不同。 在C语言中,可以通过定义一个行数组指针,使得这个指针与二维数组名具有同样的质,实现它们之间可以直接赋值。行数组指针定义如下:int (*p)[3]; 它表示,数组 *p 具有三个int类型元素,分别为 (*p)[] , (*p)[1] , (*p)[2] ,即 p指向的是具有三个int类型的一维数组,也就是说,p为行指针。此时,以下运算 p=array 是正确的。第四,二维数组作为函数参数。二维数组作为函数参数一般有两种方式:(1) void func(int **array){} (2) void func(int array[ ][N]) 注意第二种方式一定要指明二维数组的列数 当二维数组名作为函数实参时,对应的形参必须是一个行指针变量。和一维数组一样,数组名传送给变量的是一个值,因此,对应的形参也必须是一个类型相同的指针变量,在函数中引用的将是主函数中的数组元素,系统只为形参开辟一个存放的存储单元,而不可能在调用函数时为形参开辟一系列存放数组的存储单元。int main() double a[3][4]; …… fun(a); …… fun(double (*a)[n]) ……

    参考回答:楼主你好:二维数组的指针不难理解。请参看我的帖:: zhidao.baidu./question/126624 是关于指针的很通俗易懂的解释!有不明白的,我就可以了。:24526倒数第四行*(*(a+2)+2)就等价于你写的*(*board+i))其实就是*board[i]。*board就相当于board[][]的,也就是board[][]

    展开全文
  • 使用C语言进行二维数组的引用,在最后一个位置需要明确指明数组的长度,使用指针进行顺序引用或者赋值。 具体代码: 代码如下(示例): #include <iostream> using namespace std; // void __(int a[10][10])...

    使用C语言进行二维数组的引用,在最后一个位置需要明确指明数组的长度,使用指针进行顺序引用或者赋值。

    具体代码:

    代码如下(示例):

    #include <iostream>
    using namespace std;
    //
    void __(int a[10][10]){
    	int(*b)[10];
    	b = a;
    	for (int i=0;i<10;i++){
    		for(int j=0;j<10;j++){
    			cout<<i<<" "<<j<<" "<<*(*(b+i)+j)<<endl;
    			*(*(b+i)+j) = 1; 
    			cout<<i<<" "<<j<<" "<<*(*(b+i)+j)<<endl;
    		}
    //			
    	}
    } 
    
    int main(){
    	int a[10][10] ;
    	for (int i=0;i<10;i++){
    		for(int j=0;j<10;j++){
    			a[i][j]=i*10+j;
    			cout<<a[i][j]<<endl;
    		}
    
    	}
    	cout<<a[99];
    	__(a);
    }
    
    
    
    展开全文
  • 用于比较指针数组和数组指针实现算法的差异,利用函数返回指针实现。 可作为研究C语言指针使用的范例程序。 有源代码和实现结果图。
  • 关于用指针方式访问二维数组的问题 首先说明几种类型: int a[2][4] = { 1,2,3,4,5,6,7,8 };//二维数组 int **p; //二重指针跨度为sizeof(int *) int(*q)[4]; //该语句是定义一个指向数组的指针,指向含4个...
  • 但是在概念和使用方法上,二维数组指针比一维数组的指针要复杂一些。要理解指针二维数组的关系首先要记住一句话:二维数组就是一维数组,这句话该怎么理解呢?假如有一个二维数组:int a[3][4] = {{1, 3, 5, 7},...
  • 通过指针访问二维数组的三种方法

    千次阅读 多人点赞 2019-11-21 17:17:44
    下面总结了一下通过指针访问二维数组的三种方法,里边涉及指针指针数组、数组指针、指向指针指针以及二维数组的应用,愿对于大家理解和使用指针有所参考和帮助。 程序如下: #include <stdio.h> int ...
  • 1.设p是指向二维数组a[m][n]的指针变量,则有:int*p=a[0];//此时P是指向一维数组的指针。P++后,p指向a[0][1]。2.如果定义int(*p1)[n];p1=a;p1++后,p1指向a[1][0];则p+j将指向a[0]数组中的元素a[0][j]。由于a[0]、...
  • C++ 二维数组参数传递的实现方法 int a[2][2]={ {4, 6}, {9, 11} }; 我定义了这样一个数组,我想把这个数组作为参数,传递到一个函数中,并要在函数中能引用该二维数组的元素,我该怎么做?  第一种方式是直接传递...
  • 此时定义了一个二维数组,该数组是一块连续的内存空间。此时,a[0]元素是一维数组,有16个字节的内存空间。同理,a[1]、a[2]也是一维数组,都占用16个字节的存储空间。程序测试例子如下: 程序运行结果如下: ...
  • C++指针”操作二维数组

    千次阅读 2019-07-19 01:59:03
    现分别介绍使用单个指针变量(T *p)、二维数组指针变量(T (*p)[N],即专有指针)、指针数组(T *p[N])、二级指针(T **p)操作二维数组(以输出为例)。目录如下: 辅助函数 指针变量操作二维数组 二维数组指针...
  • C语言二维数组指针引用

    千次阅读 2022-04-11 15:40:58
    用指针引用二维数组元素 C语言二维数组指针引用 1.二维数组的定义与表示 二维数组是形如: 表示一个int类型,三行四列的数组 int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12} 表示一个char类型,两行三列的数组 char s...
  • 怎么用指针操作二维数组

    万次阅读 多人点赞 2017-05-10 13:20:35
    我们都知道一维数组的我们都很熟悉: int a[5] = { 1,2,3,4,5 }; int*p = a; int i, j; 这里p指针是int型指针,这里的赋值是将数组a的内存中的首地址啊a【0】在内存中的位置,地址传给p,这样p就能代表a数组了 这时...
  • 指针进行二维数组的求和

    千次阅读 2021-11-23 11:19:27
    要求编写函数fun实现二维数组每个元素相加,并把计算所得存放到每行的最后一个单元 在这里给出一组输入。例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 在这里给出相应的输出。例如: 15 40 65 ...
  • 指针 二维数组元素引用

    千次阅读 2020-12-30 16:30:24
    二维数组元素指针引用 指针与一维数组和二维数组 1.定义 2.关系 3.数组指针指针数组的区别 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的...
  • 指针:C语言二级指针二维数组

    千次阅读 2019-04-09 21:25:59
      最近用C语言写LeetCode 有的题目给的函数把二维数组用二级指针传进来 并传入行数和列数 引起一些疑惑 本来以为C语言学得海星,查了一些资料后,觉得自己还是个弟弟 : ( 按一维数组的思路处理二维数组,将二维...
  • c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下: 方法一, 形参给出第二维的长度。 例如: #include void func(int n, char str[ ][5] ) { int i; for(i = 0; i < n; i++) printf("/nstr...
  • #include using namespace std; int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}}; void test(int* p){ cout *(p + 6) ;... // 二维数组作参数 return 0; }
  • c/c++---之二级指针操作二维数组

    千次阅读 2018-11-28 15:59:34
    通过二级指针去访问二维数组需要先给二级指针分配等同于二维数组行数的一维数组指针,然后把二维数组的每行首地址赋值给对应位置的一维指针上。之后就可以通过二维指针直接访问了。 参考代码如下,可以看具体注释...
  • C语言:使用指针操作二维数组

    千次阅读 多人点赞 2017-09-16 20:03:31
    任务代码: (1)指向二维数组元素的指针: #include int main( ) { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int *p; for(p=a[0];p[0]+12;p++) { printf("%3d ",*p); } return 0; }
  • 二维数组和指针经常用于形参和实参的相互转化或者用于输出二维相互转化(例如用指针调用数组中的元素)。因此我们有许多固定的格式转换,但如果我们不了解其中的原理的话,我们很难熟练掌握运用,就和记物理公式一样...
  • (C语言)指针排序二维数组

    千次阅读 2020-04-06 18:51:01
    用指针知识将一个5×5矩阵的最大值放在中心,四角按从左到右,从上到下的顺序存放最小值。 编程提示:利用打擂台法求最大值和最小值。 输入样例: 输入数据,之间空格分隔,例如 11 12 13 14 15 21 31 66 88 23 10 ...
  • 二级指针二维数组函数参数传递

    千次阅读 2018-05-14 12:05:55
    二维数组作为函数形参时,能作为函数实参的是二维数组,数组指针指针数组作为函数形参时,能作为函数实参的是指针数组,二级指针,一级指针的地址 2、实例验证: #include &lt;stdio.h&gt; #...
  • 用指针引用二维数组元素

    千次阅读 2017-05-07 20:00:25
    首先定义一个二维数组  int a[3][2]; 关于 a *a **a 做出以下理解:  数组名a为数组首元素的地址 即 a[3][2]第一行的地址。  *a可以理解为:将第一行看成一个小数组,*a[2]表示,那么数组名*a为数组首元素...
  • #include #include int main() { int *p; int i; int size = 10; p = (int *)malloc(sizeof(int) * size); for(i=0; i; i++) { //*(p + i) = i;//the fun

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,638
精华内容 25,855
关键字:

如何用指针调用二维数组