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.可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如: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函数逐个对数组元素赋值。

参考资料:

百度百科-数组

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-02-27

在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*,也即每个元素为指针。

本回答被网友采纳
第2个回答  2015-10-29

1、定义二维指针数组与定义一维指针数组差不多,只是矩阵的维度增加了一维而已。

2、下面通过具体的实例来说明如何定义一个二维数组:

int *p[2][3];  // 定义一个二维数组,只是定义,并没有分配地址空间
int i,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\n", *p[0][1]);  // 输出结果

第3个回答  2015-11-14
定义字符型二维数组:char str[3][10];
定义指针型数组 : char *p[5] = {str[0],str[1],str[2]};
第4个回答  2012-04-21
如定义:int a[3][4];
int *p; p=a[0];此时p就指向0行0列元素

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.使用行指针:定义一个...

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

c语言里面怎么用指针表示二维字符数组
二维数组就是数组的数组,二维数组即数组的元素是一维数组的数组。那么我们要用指针指向二维数组,就是要定义一个指向数组的指针了。例如:char str[3][10]; \/\/定义了一个char型的二维数组 char (*pstr)[10]; \/\/定义了一个指向char型的数组指针 pstr=str; \/\/指针指向二维数组str 下面用pstr这...

C语言怎么定义一个字符指针指向一个二维字符数组的首地址
二维数组也是“数组的数组”所以定义一个指向由m个元素组成的一维数组指针即可指向二维数组的首元素地址。如:char arr[2][2] = { { 'a', 'b' }, { 'c', 'd' } };char (*p)[2];p=arr; \/\/ p指向首元素地址。char c = *(p[0]+ 1);\/\/ 指向0行1列 即字符b ...

C语言中二维数组行指针是什么
如果把二维数组的每一行看成一个整体,即看成一个数组中的一个元素,那么整个二维数组就是一个一维数组,它以每一行作为它的元素,这个应该很好理解。第一,来详细介绍二维数组与指针的关系。- 首先定义个二维数组 array[3][4],p 为指向数组的指针。若p=array[0],此时p指向的是二维数组第一行的...

c语言二维数组如何定义字符串???急。。。
c语言二维数组定义字符串的步骤如下:1、我们先是定义一个二级指针和行列变量【int **array,row,column;】。2、然后我们用c语言编写输入行列的语句。3、接下来我们就可以为其开辟一个一个一维装着一维数组的数组。4、接下来我们使用【array[i]=(int *)malloc(sizeof(int)*column);】为数组再次...

C语言中,如何定义一个‘指针数组’,这个‘指针数组’专门用来存放‘数组...
数组指针定义int(*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int(*p)[4];\/\/该语句是定义一个数组指针,指向含4个...

跪求C语言中怎样把很多字符串存入二维数组中,并用指针输出,急用~谢 ...
给你举个例子,这里str就是一个二维数组,我手动输入10个字符串存入该数组,然后用该二维数组的行指针输出#include<stdio.h>#include<string.h>void main(){ char str[10][20]; int i; for(i=0;i<10;i++) gets(*(str+i)); for(i=0;i<10;i++) puts(*(str+i));} 本回答由提问者推荐 举报...

C语言程序设计中"二维数组中元素指针的表示"的例题,求详解
设p是指向二维数组a[M][N]的指针变量,若有:p=a[0]; 则p+j将指向a[0]数组中的元素a[0][j]。由于a[0]、a[1]┅a[M-1]等各个行数组依次连续存储,则对于a数组中的任一元素a[i][j],指针的一般形式如下:p+i*N+j用"*"运算符表示为:*( p+i*N+j)同样,a[i][j]也可使用...

求c语言指针方式引用二维数组问题
a[0]代表第一组首元素地址,当然,a[0]也指向数组首元素的地址,a[0]=&a[0][0];a是对a取值,它取出的是a[0],当然=&a[0][0];&a[0]指a[0]的地址,还是它自己,所以&a[0]=&a[0][0]。所以,第一行个打印语句输出的5个内容都是一样的,所以,输出5个19ff0c。是a[0][0...

相似回答