char** GetInform()
{
char** b;
b=(char**)malloc(sizeof(char*)*Number); //Number是全局变量不变,主函数可获悉
for(int i=0;ichar*)malloc(sizeof(char)*4);
}
for(int i=0;ifor(int j=0;j//Stack[i]是动态变化的
{
b[i][j]=Stack[i]._a[j];
}
}
return b;
}
这个函数返回二级指针b,但我在主函数里调用这个二级指针b,并且试图输出里头的元素时,由于主函数里不知道这个二维数组的行和列,总是不能正确输出,有没有什么方法能仅通过这个b指针就获悉存入二维数组里元素的个数?
参考GPT和自己的思路:
可以在 GetInform 函数中增加一个参数,用来传递二维数组的行数。具体代码如下所示:
char** GetInform(int rowNum) {
char** b = (char**)malloc(sizeof(char*)*rowNum);
for (int i = 0; i < rowNum; i++) {
b[i] = (char*)malloc(sizeof(char)*4);
}
for (int i = 0; i < rowNum; i++) {
for (int j = 0; j < Stack[i]._top; j++) {
b[i][j] = Stack[i]._a[j];
}
}
return b;
}
主函数中调用 GetInform 函数时,将二维数组的行数作为参数传递进去即可:
char** arr = GetInform(Number);
这样,主函数就能够获得二维数组的行数,并正确输出元素了。
这是没有办法的,所以字符串会用\0作为标志。就是因为获取不了数组长度
在GetInform中,b[i][j]赋值之前,先将其每个元素的指针都赋值成NULL, 可通过判断b[i][j]是否为NULL来判断b指针存入二维数组里元素的个数,将非空的统计下就可以了