【发布时间】:2016-07-30 22:10:42
【问题描述】:
我正在尝试制作一个“int** arr[5]”,其中的每个单元格都包含一个“int* 数组”,每个“int* 数组”都有不同的大小。每当我尝试打印其中一个单元格时,它只会打印其中的第一个数字,为什么会这样?如何打印整个数组?
#include <stdio.h>
#include <stdlib.h>
void sortNumber(int** arr[]);
int main(void)
{
int i = 0;
int* arr1[3] = { 2, 5, 8 };
int* arr2[2] = { 1, 7 };
int* arr3[6] = { 5, 1, 8, 3, 7 ,12 };
int* arr4[4] = { 3, 9, 4, 29};
int* arr5[5] = { 4, 11, 17, 23, 25 };
int** bigArr[5] = {*arr1, *arr2, *arr3, *arr4, *arr5};
sortNumber(bigArr);
system("PAUSE");
return 0;
}
void sortNumber(int** arr[])
{
printf("%d", arr[1]);
}
【问题讨论】:
-
因为您只打印一个元素。需要一个循环。
-
您的代码有几个问题。请阅读“指针”。
-
*arr1是int *类型,用于初始化bigArr的其他表达式也是如此。如果您改用&arr1[0](键入“指向int指针或int **的指针),那就没问题了。除此之外,OldProgrammer 是正确的,因为您需要一个循环。但是,这里有一个与循环思路:你怎么知道传递给sortNumber的数组在哪里结束?没有itemCount参数,bigArr不会以任何类型的sentinel value 结束,例如NULL指针。 -
您必须在将 int 表声明为表或指针(int arr[] 或 int *arr)之间进行选择;重新检查并仔细分析您的代码。
-
+1 @ChronoKitsune 的观察结果。要打印出所有数组元素,您需要知道有多少。 C 没有你在许多其他语言中找到的
array.length属性的奢侈。因此,您需要明确定义itemCount(或使用哨兵值,但在处理整数时可能会变得混乱)。您可能需要考虑使用类似这样的东西:struct iArray_s{ int *arr; int itemCount; }这将创建一个结构,您可以在其中存储整数数组以及一个可以指定数组包含多少成员的变量。
标签: c pointer-to-pointer pointer-to-array