如何在c语言二维数组中使用指针

Python016

如何在c语言二维数组中使用指针,第1张

程序中有些问题:

1、函数的定义有错误(参数格式不对);

2、程序中没有调用函数(或者说是调用格式有误)

3、函数中的处理逻辑需要修改(一步一步来,这样容易处理和理解)。

你定义的函数是使用数组作为参数的,数组名本身就是个地址(相当于指针)。

下面在手机上用易历知食软件里的微C程序设计来演示修正后的代码并运行程序,供参考。

手机上修正后的代码如下图:

手机上运行的效果如下图所示:

一、你的 float score 数组定义的是:一个3行、4列的二维浮点数组,数组的元素为浮点数。如果你换个格式书写就清晰了!

float score[3][4]={{65,67,70,60,},{80,87,90,81,},{90,99,100,98}}

在调用的过程中,score 就是这个数组的首地址,指向的是浮点数组{65,67,70,60,}。score + 1 指向的是数组{80,87,90,81,}。

二、你的 float *p 定义的是:一个指向浮点数的指针。这个是一维的。

在调用的过程中,float 指向的是 xx。一个浮点数字。

两个的定义不同,所以参数传递过程中会出错。

三、你的 float (*p)[4] 定义的是:一个指向含有四个元素的浮点数组的指针。

在调用的过程中,float 指向的是{xxx,xx,xx,xx,},由四个浮点数组成的数组。

这时两个定义相同,所以参数传递过程中没有错误。

四、有个建议,你的程序书写格式不清晰,不利于你纠错和修改,应该尽量的清晰、明确,不建议使用简化方式定义参数。

作为一个软件工作者,应该尽量使程序流畅、格式清晰、易读,这是一个软件工作者最基本的职业素养。

格式化后,程序如下,会清晰很多:

#include<stdio.h>

void main()

{

void search (float (*p)[4],int n)/*这里的 float *p 好像有问题*/

float score[3][4]={{65,67,70,60,},{80,87,90,81,},{90,99,100,98}}

search(score,2)

}

void search(float (*p)[4],int n)/*这里的 float *p 好像有问题*/

{

int i

printf("the score of No.%d are:\n",n)

for(i=0i<4i++)

{

printf("%5.2f",*(*(p+n)+i))

}

printf("\n")

}

1.设p是指向二维数组a[m][n]的指针变量,则有:

int* p=a[0]//此时P是指向一维数组的指针。P++后,p指向 a[0][1]。

2.如果定义int (*p1)[n]p1=ap1++后,p1指向a[1][0]

则p+j将指向a[0]数组中的元素a[0][j]。

由于a[0]、a[1]┅a[M-1]等各个行数组依次连续存储,则对于a数组中的任一元素a[i][j],指针的一般形式如下:

p+i*N+j, 相应的如果用p1来表示,则为*(p1+i)+j。

元素a[i][j]相应的指针表示为:

*( p+i*N+j) ,相应的如果用p1来表示,则为*(*(p1+i)+j)。

同样,a[i][j]也可使用指针下标法表示,如p[i*N+j]。

若有:

int *p=a[0]

则数组a的元素a[1][2]对应的指针为:p+1*4+2

元素a[1][2]也就可以表示为:*( p+1*4+2)

用下标表示法,a[1][2]表示为:p[1*4+2]

扩展资料:

指针与数组的关系:

1.指针数组:就是一个由指针组成的数组,那个数组的各个元素都是指针,指向某个内存地址。 char *p[10]  //p是一个指针数组

2.数组指针:数组名本身就是一个指针,指向数组的首地址。注意这是一个常数。

example:

char (*p)[10];  //p是一个数组指针

3.函数指针:本身是一个指针,指向一个函数入口地址,通过该指针可调用其指向的函数,使用函数指针可实现回调函数。

参考资料:

百度百科-指针