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

c语言里面怎么用指针表示二维字符数组,第1张

二维数组就是数组的数组,二维数组即数组的元素是一维数组的数组。那么我们要用指针指向二维数组,就是要定义一个指向数组的指针了。例如:
char str[3][10]; //定义了一个char型的二维数组
char (pstr)[10]; //定义了一个指向char型的数组指针
pstr=str; //指针指向二维数组str
下面用pstr这个指针对二维数组进行赋值 *** 作
int i;
for(i=0;i<3;i++)
scanf("%s",(p+i)); //(p+i)等价于str[i]

malloc 函数原型是:void malloc (size_t size); 它返回一个指针,它指向分配的存储块的首地址。
例如: 要给 int a; 分配成NR行,NC列的二维数组,可以这样做:
int i,j, NR=3, NC=5;
int a;
a = (int ) malloc(sizeof(int ) NR);
for (j=0;j<NR;j++){
a[j] = (int ) malloc(sizeof(int) NC);
}
动态分配以后,就可以使用 a[i][j] 了。如同已声明过 int a[3][5] 一样。

两者都是指针,但指向的数据类型完全不同。
p1指向的是整数,这好理解。
p2指向的是长度为10的数组。
p1 = a是完全没有问题的。
p2 = a其实是做了自动类型转换的,通常会有警告(在某些编译器上甚至通不过)。
虽然p1 = a,p2 = a后,p1是一个整数,p2是一个数组的地址(在这里是a);
p1 ++ 将使p1指向a[0]后面的一个整数。
而p2 ++ 将是p2指向a后面的一个数组。
像p2这样指向数组的指针通常用于2维数组。
比如b[3][10];
那么p2 = b后,p, (p+1), (p+2)分别是b[0], b[1], b[2]。
利用p++可以遍历这些长度为10的数组。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/13345063.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-18
下一篇 2023-07-18

发表评论

登录后才能评论

评论列表(0条)

保存