当前位置:首页 » 编程语言 » c语言指向二维数组的指针

c语言指向二维数组的指针

发布时间: 2023-08-13 01:54:45

‘壹’ c语言二维数组指针变量是什么,int (*p)[2]什么意思

二维数组指针变量形式如下:
类型名
(*数组名)[数组行数][数组列数]
如:int
(*p)[2][3];
//
定义一个int类型的二维数组指针变量,数组中每个元素都是一个指针
int
(*p)[2]表示定义一个数组指针,只是是一个一维的数组指针,数组中每个元素(共2个元素)都是一个int类型的指针变量,指针指向的地址就需要后续程序给出,不然会变为野指针。

‘贰’ C语言如何定义指针指向字符型二维数组

在C语言中,可以通过如下方式来定义指向字符型二维数组的指针:
char c[4][5]; // 定义一个4行5列的字符型二维数组
char (*pc)[5]; // 定义一个含5个元素的数组指针
pc=c; // 将数组指针pc指向二维字符数组c
注:
char
(*pc)[5]
不能写为 char
*pc[5]
char
(*pc)[5]
表示数组指针,数组中每个元素为char型;
char
*pc[5]
表示指针数组,数组中每个元素为char*,也即每个元素为指针。

‘叁’ 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=0;i<4;i++)
{
printf("%5.2f",*(*(p+n)+i));
}
printf("\n");
}

‘肆’ C语言怎么用指针代替二维数组

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]、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]

(4)c语言指向二维数组的指针扩展阅读:

指针与数组的关系:

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

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

example:

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

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

网络-指针

‘伍’ c语言里面怎么用指针表示二维字符数组

二维数组就是数组的数组,二维数组即数组的元素是一维数组的数组。那么我们要用指针指向二维数组,就是要定义一个指向数组的指针了。例如:

charstr[3][10];//定义了一个char型的二维数组
char(*pstr)[10];//定义了一个指向char型的数组指针
pstr=str;//指针指向二维数组str

下面用pstr这个指针对二维数组进行赋值操作

inti;
for(i=0;i<3;i++)
scanf("%s",*(p+i));//*(p+i)等价于str[i]

‘陆’ C语言中二维数组行指针是什么

先从存储的角度对二维数组作一个全面的了解。二维数组在内存中的存储,是按照先行后列依次存放的。从内存的角度看,可以这样说,二维数组其实就是一个一维数组,在内存中没有二维的概念。如果把二维数组的每一行看成一个整体,即看成一个数组中的一个元素,那么整个二维数组就是一个一维数组,它以每一行作为它的元素,这个应该很好理解。
第一,来详细介绍二维数组与指针的关系。-
首先定义个二维数组 array[3][4],p 为指向数组的指针。
若p=array[0],此时p指向的是二维数组第一行的首地址,则 p+i 将指向array[0]数组中的元素array[0][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},{7,8,9},{10,11,12}};
int * p=array[0];
数组array有四个元素,分别为array[0],array[1],array[2],array[3],每个元素为包含3个元素的一维数组,
如array[0]的3个元素为 array[0][0],array[0][1],array[0][2]。
元素array[2][2]对应指针为:array+2*3+2,
指针表示法为:*(array+2*3+2) ,
下标表示法为:array[2*3+2] 。
特别注意:虽然 array[0] 与 array 都是数组首地址,但两者指向的对象不同,这点要非常明确。array[0] 是一维数组的名字,它指向的是一维数组array[0]的首地址,所以 *array[0]与array[0][0]为同个值。而 array 是二维数组的名字,它指向的是所属元素的首地址,其每个元素为一个行数组。它是以‘行’来作为指针移动单位的,如array+i 指向的是第 i 行。对 array 进行 * 运算,得到的是一维数组 array[0] 的首地址,所以 *array 与 array[0] 为同个值。如果定义 int* p,p为指int类型的指针,指向int 类型,而不是地址。故以下操作 :p=array[0] (正确) ,p=array (错误) 。这点要非常注意。
第二,看看如何用数组名作地址表示其中元素。
对二维数组array ,array[0] 由 array指向,故*array 与array[0] 是相同的,依次类推可得 array[i] 由array+i 指向,*(array+i) 与array[i]是相同的。 因此,对于数组元素 array[i][j] ,用数组名表示为 *(*(array+i)+j) ,指向该元素的指针为 *(array+i)+j 。
注意:数组名虽然是地址,但与指向数组的指针性质不同。指针变量可以随时改变其所指向对象,而数组名不可以,一旦被定义,就不能通过赋值使其指向另外一个数组,但是在Java中则可以。
第三,顺便了解一下不太常用的‘行数组指针’。
对于二维数组array[4][3],与int* p 。二维数组名array 不能直接赋值给p。原因前面已讲过,两只的对象性质不同。 在C语言中,可以通过定义一个行数组指针,使得这个指针与二维数组名具有同样的性质,实现它们之间可以直接赋值。行数组指针定义如下:
int (*p)[3]; 它表示,数组 *p 具有三个int类型元素,分别为 (*p)[0] , (*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])
……

‘柒’ c语言中如何通过二级指针来操作二维数组

1、首先我们打开电脑里的C语言软件,新建一个工程和.c文件,输入头文件和主函数。

热点内容
c语言取随机数 发布:2025-02-06 02:46:57 浏览:863
uc缓存的视频卡住 发布:2025-02-06 02:17:05 浏览:144
解压同学介绍 发布:2025-02-06 02:13:10 浏览:776
icsftp 发布:2025-02-06 02:12:59 浏览:325
ftp跨域上传文件 发布:2025-02-06 02:09:22 浏览:822
非递归全排列算法 发布:2025-02-06 02:06:45 浏览:551
vs反编译dll 发布:2025-02-06 02:06:00 浏览:584
ubuntu设置ftp权限 发布:2025-02-06 01:54:07 浏览:599
奇瑞5哪个配置值得买 发布:2025-02-06 01:51:56 浏览:552
黑鲨手机哪里看安卓版本 发布:2025-02-06 01:36:04 浏览:803