c语言指针与二维数组问题(C指针数组)
超过一维的n维数组可以转换为n-1维数组指针,只是丧失了第一维的长度信息声明与n维数组等价的n-1维数组指针时,只需将第一维改写为指针形式(*)即可,我来为大家科普一下关于c语言指针与二维数组问题?下面希望有你要的答案,我们一起来看看吧!
c语言指针与二维数组问题
超过一维的n维数组可以转换为n-1维数组指针,只是丧失了第一维的长度信息。声明与n维数组等价的n-1维数组指针时,只需将第一维改写为指针形式(*)即可。
一维数组名可以转换为一级指针,也是丧失了长度信息。
char str[12];
char *sp = str; // 注意符号“*”与“[]”一定意义上的等价性
int arr2[3][4];
int (*p2)[4] = arr2;
int arr3[3][4][5];
int (*p3)[4][5] = arr3;
对于一维数组,如果其元素是一个指针呢?如:
char* str[12];
等价的指针形式应该怎样写?
如前面所述,str对应一级指针,自然,改写后与二级指针等价了,当然,长度信息也没有了。
char **strs = str;
看如下实例:
#include <iostream>
using namespace std;
void print(char *str, int len)
{
for(int i=0;i<len;i )
cout<<str[i];
cout<<endl;
}
void print2(char **str, int len)
{
for(int i=0;i<len;i )
cout<<str[i]<<" ";
cout<<endl;
}
int main()
{
char alp[12] = "abcdefghijk";
print(alp,12);
char* month[12]={"January","February","March",
"April","May","June",
"July","August","September",
"October", "November","December"};
print2(month,12);
while(1);
return 0;
}
我们知道,申请堆内存时,返回一个指针,可以是申请单个或多个内建数据类型(Built-in data type)(或结构体)。当申请的是多个内建数据类型(Built-in data type)(或结构体)时,也就是相当于建立了一个动态一维数组。如果想申请一个n行m列的动态二维数组呢?虽然可以将n行m列的动态二维数组看成一维的n*m个元素的动态一维数组,只是处理的逻辑要做一些改变,但有没有办法可以直接申请一个逻辑上的动态二维数组呢?答案是先建立一个动态的一维指针数组,再循环将每一个指针指向一个动态一维数组。如前面所述,一维指针数组逻辑上等价于一个二维指针。
char **pp = new char*[12];
for(int i=0;i<12;i )
pp[i] = new char[10];
// ……
for(int j=0;j<12;j )
delete pp[j];
delete pp;
-End-
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com