[英]create a multdimentional array to store many arrays of different sizes in C
[英]Array of arrays, with different sizes
我有一個數組,每個單元格都有數組。 例如,大數組稱為arr
:
int a[3] = {3, 2, 1};
int b[2] = {2, 1};
int *arr[2] = {a, b}
現在問題是,如果我想在大陣列內打印小arrs。
這是我的代碼:
#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,這是指針的大小(數組的名稱),而不是它自己的所有數組。那么什么我可不可以做?
謝謝!
問題:
C語言只提供了一種查找類型大小的方法。 這給出了將sizeof
應用於以下內容之間的細微差別:
1)類型的數組,例如:
int a[3];
sizeof(a); // => 3 * sizeof(int)
2)指向類型的指針:
int *ptr;
sizeof(ptr); // => sizeof(int *)
要么
int a[3] = {3, 2, 1};
int b[2] = {2, 1};
int *arr[2] = {a, b};
sizeof(arr[1]); // => sizeof(int *)
一些解決方案
存儲大小
由於jfly建議存儲數組的大小。
附加結束標記
添加像'\\0'
這樣的結束標記,用於c風格的字符串。 在這種情況下,您可以使用INT_MAX
或INT_MIN
。
printArr
實現需要更改為:
void printArr(int *arr)
{
int *it = arr;
while(arr != INT_MIN);
{
printf("%d ", *it);
}
printf("\n");
}
缺點:
好處:
使用迭代器
將指針存儲到第一個值,將指針存儲在最后一個值之后。
void printArr(int *begin, int *end)
{
for (int *it = begin; it != end; it++)
{
printf("%d ", *it);
}
printf("\n");
}
int *end_arr[2] = {a + 3, b + 2};
for (int i = 0 ; i < 2 ; i++)
{
printArr(arr[i], end_arr[i]);
}
由於arr
是一個指針數組,因此您無法從指向數組的指針獲取數組的大小,因此您需要額外的大小信息:
int size_arr[2] = {sizeof(a) / sizeof(int), sizeof(b) / sizeof(int)};
for (int i = 0 ; i < 2 ; i++)
{
printArr(arr[i], size_arr[i]);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.