c语言二维指针数组
‘壹’ c语言如何定义指针指向字符型二维数组
使用指针变量访问二维数组的任意一个元素的方法:
1.使用列指针:定义一个列指针p,让它指向二维数组的第0个元素
int a[3][4];
int *p;
p=&a[0][0];
//因为a[0]是第0行的数组名,所以p=&a[0][0]相当于p=a[0],因为a[i][j]前面共有i*4+j个元素
该二维数组的任意i行j列元素可表示为*(p+i*4+j)。
2.使用行指针:定义一个行指针p,让它指向二维数组的第0行
int a[3][4];
int (*p)[4];
p=a; //也可以为p=&a[0];
其中* ( *(p+i)+j)表示任意一个i行j列的元素。
(1)c语言二维指针数组扩展阅读:
数组的使用规则:
1.可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如:static int a[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。
2.只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能写为:static int a[10]=1;请注意:在C、C#语言中是这样,但并非在所有涉及数组的地方都这样,数据库是从1开始。
3.如不给可初始化的数组赋初值,则全部元素均为0值。
4.如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。例如:static int a[5]={1,2,3,4,5};可写为:static int a[]={1,2,3,4,5};动态赋值可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合scanf函数逐个对数组元素赋值。
网络-数组
‘贰’ C语言二维数组指针
楼主你好:
二维数组的指针不难理解。
请参看我的帖子:
http://..com/question/128766724.html
是关于指针的 很通俗易懂 的解释!
有不明白的,QQ我就可以了。
QQ:270495267
倒数第四行*(*(a+2)+2)就等价于你写的*(*board+i))
其实就是*board[i]。
*board 就相当于 board[0][0] 的 地址 ,也就是&board[0][0]
‘叁’ 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语言指针与二维数组
a是二维数组名,其字面值是该数组的起始地址,该地址同时也是一维数组a[0]的起始地址
所以a,*a,a[0],&a[0]的字面值都相同,a[0][0]就是首个元素
剩下的几行输出同理,无非就是行指针偏移的+1是以第二维的大小移动的而已
‘伍’ c语言中二维数组的指针如何表示
比如定义一个int型的二维数组,如下:
int **p;
或者
int p[MAX_ROW][MAX_LINE];
不同的是前者定义了一个int型二维数组的指针,编写器知道该指针的移动方式以int为单位,但此时该指针为NULL,即没有与内存中的物理单元进行对应。使用指针前需要用malloc()为该指针分配一段内存空间,内存空间的大小在malloc()的参数中指定,系统会为该指针分配一段空闲内存供该指针使用。或者将你的程序中其他int类型的指针赋值给该指针使其映射到内存物理单元。在程序结束或不在需要使用该指针时需要使用free()将该指针所映射内存释放。
后者在定义时为该指针分配了MAX_ROW*MAX_LINE个int大小的空间映射到内存,之后就可以直接使用了。
‘陆’ 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语言二维数组指针变量是什么int (*p)[2]什么意思
c语言比较灵活,C语言的指针更加灵活多变,int (*p)[2]是一个整型的指针型一维数组,表示两个元素,具体如下,
数组指针变量形式如下:
类型名 (*数组名)[数组行数][数组列数]
int (*p)[2]表示定义一个数组指针,指针指向的地址就需要后续程序给出,不然会变为野指针。
‘捌’ C语言二维数组指针变量是什么,int (*p)[2]什么意思
二维数组指针变量形式如下:
类型名
(*数组名)[数组行数][数组列数]
如:int
(*p)[2][3];
//
定义一个int类型的二维数组指针变量,数组中每个元素都是一个指针
int
(*p)[2]表示定义一个数组指针,只是是一个一维的数组指针,数组中每个元素(共2个元素)都是一个int类型的指针变量,指针指向的地址就需要后续程序给出,不然会变为野指针。
‘玖’ C语言 如何定义一个二维指针数组
定义二维指针数组与定义一维指针数组差不多,只是矩阵的维度增加了一维而已。
下面通过具体的实例来说明如何定义一个二维数组
int*p[2][3];//定义一个二维数组,只是定义,并没有分配地址空间
inti,j;//数组的行数和列数
//下面的2个for循环是用来对二维指针数组进行初始化的,也即分配地址。如果不进行初始化操作,就会使指针变为野指针(即指向不明)。
for(i=0;i<2;i++)
for(j=0;j<3;j++)
p[i][j]=(int*)malloc(sizeof(int));
*p[0][1]=2;//对指针数组中指针所指向的内存单元进行赋值操作
printf("%d ",*p[0][1]);//输出结果
‘拾’ C语言关于二维数组指针表示方法
虽然说“首地址
=
array[0]=&array[0][0]”,这只代表他们的值相同,意义不同的。
array是二维指针变量,array[0]是一维指针变量,&array[0][0]是变量的地址。
*array
表示二维指针前加*
等于一维指针array[0],值还是以前的值,但是意义不同。