【发布时间】:2014-03-30 15:19:11
【问题描述】:
我有一个数组,它在每个单元格中都有数组。比如大数组叫arr:
int a[3] = {3, 2, 1};
int b[2] = {2, 1};
int *arr[2] = {a, b}
现在的问题是,如果我想在大数组中打印小 arr。
这是我的代码:
#include <stdio.h>
void printArr(int arr [], int n)
{
for (int i = 0 ; i < n ; i++)
{
printf("%d ", *(arr + i));
}
printf("\n");
}
int main()
{
int a[5] = {1, 8, 4, 2, 0};
int b[3] = {1, 4, 2};
int *arr [2] = {a, b};
int n = 0;
for (int i = 0 ; i < 2 ; i++)
{
printArr(*(arr + i), n);
}
}
输出应该是这样的:
1 8 4 2 0
1 4 2
但我无法获得每个数组的大小,因为sizeof(*(arr + i) 给了我 4,这是指针的大小(数组的名称),而不是它自己的所有数组。
那我该怎么办?
谢谢!
【问题讨论】:
-
为什么不使用一个可以存储数组大小的结构体,并用这样的结构体组成一个数组呢?顺便说一句,试试
sizeof(arr[i])/sizeof(arr[i][0])? -
有没有不使用 struct 的方法?而
sizeof(arr[i])/sizeof(arr[i][0])返回 1,当有 5 个元素时... -
好吧,那就没办法了。
sizeof(arr[i])/sizeof(arr[i][0])如果 arr[i] 是数组而不是指针,则有效。 C 不存储数组大小。所以你最好的选择是使用像struct {int *arr; int size;}这样的结构并制作一个这样的结构数组。 -
如果无法避免数组,可以试试这个吗?
int a[6] = {<size of array>, 2,3,4,5}