gpt4 book ai didi

c - 在 C 中索引类似于 matlab "var[1:10]"的多个数组/矩阵元素

转载 作者:太空宇宙 更新时间:2023-11-04 01:44:16 24 4
gpt4 key购买 nike

为了我的计算,我需要索引到一个数组中。我习惯了 MATLAB,您可以在其中以类似

的方式进行索引
var[1:10]  // extracts the first through to the 10th element of "var"

我试图在 C 中找到一个类似的原则,如果可能的话不使用循环。从研究中我只能看到正在使用的循环。

如果这是唯一的方法,那么可以使用 #define 或类似的方法来创建一个宏,当您编写 [start:end] 时,它会实现一个循环,但在 main 代码中没有看到?

我已经编写了一个可以在幕后实现的基本循环,如果有一种方法可以指定这是您要在 [start:end] 场景中使用的循环。

#include <stdio.h>

int main() {
int array[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int start = 3;
int end = 8;
int var[5];
int j = 0;

for (int i = start; i <= end; i++) {
var[j] = array[i];
j++;
}

printf("%d", var[5]);
}

我是否在尝试做一些不可能或不切实际的事情?对于我正在尝试做的事情,编写一个循环或调用一个函数会使代码变得比我希望的更困惑。

最佳答案

从数组中提取子数组可能有两种截然不同的含义:

  • 您可以通过将指向 start 元素的指针和长度为 end - start 的指针传递给需要指针的函数来对子数组进行操作int 和长度的数组。

  • 但是请注意,如果函数修改此子数组,则更改也会发生在原始数组中,因为您作用于此数组的一部分。

  • 另请注意,数组索引值在 C 中从 0 开始,这与 MATLAB 不同,因此 a 开头的 10 个元素的切片具有索引值 09

  • 如果您希望提取的子数组不干扰原始数组,您需要一个单独的数组,可以按照示例中的定义或使用 malloc 从堆中分配调用

这是您的代码的修改版本:

#include <stdio.h>

void print_array(const char *msg, const int *a, int count) {
printf("%s", msg);
for (int i = 0; i < count; i++) {
printf(" %d", a[i]);
}
printf("\n");
}

int main() {
int array[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int start = 3; // start from the third element
int end = 8; // stop before the 8th element
int var[5]; // the extracted slice has 8-3=5 elements indeed

// print the original array
print_array("original array:", array, 10);

// print the slice of the original array from 3 to 8
print_array("subarray array[3:8]:", array + 3, 8 - 3);

// extract a copy of the subarray
for (int i = start; i < end; i++) {
var[i - start] = array[i];
}

// print the extracted array:
print_array("extracted array:", var, 5);
return 0;
}

关于c - 在 C 中索引类似于 matlab "var[1:10]"的多个数组/矩阵元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56714148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com