话题: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语言调用函数时二维数组实参,C语言函数调用二维数组,指针问题相关推荐

  1. C语言调用函数时参数传递实测(好久以前记录的)

    上面是函数原型.来看看它编译后的反汇编是怎样执行的.理解函数的调用过程. 第一步:int i= 10 在执行完i= 10后,可以查到i的地址是0x0028FAAC,然后查对应的内存地址 从图中可以看到 ...

  2. C语言调用函数将is替换为be,C语言程序设计课件ppt.ppt

    C语言程序设计课件ppt 说明: ⑴宏名一般用大写: ⑵编译时用字符串无条件替代宏名: #define PI 3.1415926; - PI*r*r 3.1415926;*r*r ⑶宏名的有效范围,从 ...

  3. c语言:当数组作为形参调用函数时,需要连同数组长度一起传进来!

    以前一直不知道为什么数组作为形参调用函数时需要连同数组长度一起传进来,难道不能在被调用函数当中利用sizeof()自己算吗?答案是不可以! 下面来做个实验: /*project:test editor ...

  4. python 函数的调用的时候参数的传递_python定义函数时的参数调用函数时的传参...

    一.定义函数: 1.位置参数:直接定义参数 2.默认参数(或者关键字参数):参数名 = "默认值" 3.位置参数必须在默认参数之前 二.调用函数: 1.按位置传,直接写参数的值 2 ...

  5. 在C语言程序中 当调用函数时,c语言程序设计第2版) 教学课件 作者 梅创社试题库 期末试卷一.docx...

    期末试卷一 一.单项选择题(每题1分,共45分)1.在计算机系统中,可以执行的程序是( )A.源程序 B.汇编语言程序C.机器语言程序 D.ASCII码2.C语言程序的基本单位是( )A.程序行 B. ...

  6. c语言函数调用找不到标识符,C语言在main中调用函数时找不到标识符

    把定义的函数放在,main函数之前即可. (推荐学习:phpstorm) 自定义的函数需要声明在调用之前,比如说在main函数里调用自定义的fun(),则fun()的方法体需要写在main函数之前. ...

  7. c语言调用函数计算分段函数值,输入x,计算并输出下列分段函数f(x)的值(保留2位小数) c语言...

    计算分段函数输入 x ,计算并输出 y 的值.公式如下 当x >= 0时,f(x) = x^0.5,当x小于0时,f(x #include#include//[1{intmain()//你所写的 ...

  8. js传参不是数字_js调用函数时传入的参数个数与函数定义时的参数个数不符时的操作...

    1.在js中函数没有重载的概念,如果声明了多个重名的函数,不管函数的形参个数是否一样,只有最有一个有效,其他的函数声明都是无效的.比如说声明了两个函数fn(),第一次声明时没有形参,第二次声明时形参有 ...

  9. C语言调用函数如何返回多个变量值?【基础】

    最近用到了一部分C/C++的相关知识,但是C/C++的函数只能返回一个变量值,如果要返回多个就很难做.经过多方面查找资料,发现如果想返回多个变量值一般只有两种方法: 设置指针和地址: 构造结构体: 设 ...

  10. python中调用函数时必须有实参_Python之函数(一)定义函数以及传参

    定义函数以及传参 函数的定义 def 函数名(): 函数体 例子: def func():#def关键字--定义 func函数名--和变量定义规则一样 ()必须要写格式 :声明 语句结束 s=[1,2 ...

最新文章

  1. android手机播放pc音乐播放器,最强手机音乐播放器?Foobar2K安卓版体验
  2. 【Android 内存优化】自定义组件长图组件 ( 获取图像宽高 | 计算解码区域 | 设置图像解码属性 复用 像素格式 | 图像绘制 )
  3. Hadoop Streaming二次排序
  4. IT:如何使用Server 2008 R2上的远程桌面服务设置自己的终端服务器
  5. arduino openmv 显示图像_OpenMV与Arduino NUO的连接方式
  6. webpack转内联px为rem_Vuejs项目配置webpack将px自动转化为rem,适配移动端
  7. kotlin设置按钮不可点击_全彩LED显示屏软件空点功能如何设置、使用?
  8. PTA 程序设计天梯赛(61~80题)
  9. S3C2440 进行微秒级、毫秒级延时函数
  10. 计算机链接与rtu通讯的区别,RTU
  11. RPLIDAR A1激光雷达学习笔记
  12. 数字化转型不给力?你可能少了vPro这样的“芯”动力
  13. 对于Biotin-LC-NHS Estercas:72040-63-2与伯氨基 (-NH2) 反应的作用有哪些?
  14. Godot Engine:用着色器实现通过开关隐藏部分模型
  15. Windows电脑如何控制安卓手机
  16. PID串口助手的第一部分:串口通信
  17. uefi怎么念_uefi和legacy是什么意思
  18. win7系统计算机虚拟内存不足,Win7系统虚拟内存不足的应对办法
  19. Gallery中,取消惯性滑动,滑动一次只切换一个视图
  20. 如何做互联网广告代理?市场前景如何

热门文章

  1. windows必备的驱动软件推荐
  2. 一文搞懂 | Linux 时钟子系统
  3. php递归算法获取树形菜单数据TreeMenu代码实现
  4. IDEA自动生成serialVersionUID的设置
  5. 诺基亚安卓手机_宁可不做手机?也不用安卓系统!诺基亚:真香啊
  6. Rockchip平台cpu散热风扇随温度自动调速的配置方法
  7. php根据两点经纬度计算距离
  8. 32*32的booth算法的乘法器
  9. 公钥基础设施PKI体系介绍
  10. PS星光闪耀滤镜:Topaz Star Effects Mac版