将数组的子集复制到C中的另一个数组/数组切片中

fga*_*gar 12 c arrays subset slice

在C中,是否有内置的数组切片机制?

比如在Matlab中,例如,A(1:4)

会产生=

 1     1     1     1
Run Code Online (Sandbox Code Playgroud)

我怎样才能在C中实现这一目标?

我试过看,但最接近我能找到的是:http://cboard.cprogramming.com/c-programming/95772-how-do-array-subsets.html

subsetArray =&bigArray [someIndex]

但这并没有完全返回切片数组,而是指向切片数组的第一个元素的指针......

非常感谢

Afo*_*oto 9

在std 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];
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


fga*_*gar 6

感谢每个人指出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];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,A是我的输入(原始数组),B是我的输出(切片数组)。我这样调用该函数:

GetSlicedMultiArray4Col(A, A_rows, A_cols, B, target_row);
Run Code Online (Sandbox Code Playgroud)

例如:

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);
Run Code Online (Sandbox Code Playgroud)

这将产生一个结果(多维数组B [1] [4]),该结果在Matlab中等于A(target_row,1:4)的结果。

我是C语言的新手,所以如果我输入错误或可以使此代码变得更好,请更正我的行为...再次感谢:)