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]
但这不会返回切片后的数组,而是指向切片数组第一个元素的指针...
非常感谢。
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]
但这不会返回切片后的数组,而是指向切片数组第一个元素的指针...
非常感谢。
在标准C中无法实现此操作,您必须自己动手实现。如果您有一个字符串,可以使用string.h库来处理,但是对于整数,我不知道是否有相应的库。
除此之外,在获得您想要的内容后,从哪个点开始进行子集操作其实很容易实现。
假设您知道您的“主”数组的大小并且它是一个整数数组,您可以这样做:
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];
希望这可以帮助到您。
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);
据我所知,在C语言中,数组名只被视为一个常量指针。因此,你无法确定其子集的大小。而且,你可以将数组分配给一个新地址。因此,你可以使用一个指针来代替。但是你需要自己管理子集的大小。