在C中,是否有内置的数组切片机制?
就像在Matlab中一样, A(1:4)
会产生=
1 1 1 1
如何在C中实现这一目标?
我试过看,但我能找到的最接近的是:http://cboard.cprogramming.com/c-programming/95772-how-do-array-subsets.html
subsetArray =& bigArray [someIndex]
但是这并没有完全返回切片数组,而是指向切片数组的第一个元素...
非常感谢
答案 0 :(得分:9)
无法在标准C中执行此操作。你必须自己做。 如果你有一个字符串,你可以使用string.h来处理它,但是对于整数来说,没有我知道的库。 除此之外,拥有你拥有的东西后,你想要开始你的子集的地方实际上很容易实现。
假设你知道'main'数组的大小并且是一个整数数组,你可以这样做:
subset = malloc((arraySize-i)*sizeof(int)); //Where i is the place you want to start your subset.
for(j=i;j<arraySize;j++)
subset[j] = originalArray[j];
希望这会有所帮助。
答案 1 :(得分:4)
感谢大家指出C中没有这样的内置机制。
我尝试使用@Afonso Tsukamoto建议但我意识到我需要一个多维数组的解决方案。所以我最终写了自己的功能。我会把它放在这里以防其他人正在寻找类似的答案:
void GetSlicedMultiArray4Col(int A[][4], int mrow, int mcol, int B[1][4], int sliced_mrow)
{
int row, col;
sliced_mrow = sliced_mrow - 1; //cause in C, index starts from 0
for(row=0; row < mrow; row++)
{
for (col=0; col < mcol; col++)
{
if (row==sliced_mrow) B[0][col]=A[row][col];
}
}
}
所以A是我的输入(原始数组),B是我的输出(切片数组)。 我把这个函数称为:
GetSlicedMultiArray4Col(A, A_rows, A_cols, B, target_row);
例如:
int A[][4] = {{1,2,3,4},{1,1,1,1},{3,3,3,3}};
int A_rows = 3;
int A_cols = 4;
int B[1][4]; //my subset
int target_row = 1;
GetSlicedMultiArray4Col(A, A_rows, A_cols, B, target_row);
这将产生一个结果(多维数组B [1] [4]),在Matlab中等于A(target_row,1:4)的结果。
我是C的新手,所以如果我错了或者这个代码可以做得更好,请纠正我......再次感谢:)
答案 2 :(得分:2)
在C中,据我所知,数组名称只是一个const指针。所以你永远不知道子集的大小。此外,您还可以将一个arrary分配给一个新地址。所以你可以简单地使用指针。但是你应该自己管理子集的大小。