簡體   English   中英

將數組的一部分作為函數參數傳遞

[英]Pass in part of an array as function argument

我有一個數組int arr[5] = {10, 2, 3, 5, 1} 10,2,3,5,1 int arr[5] = {10, 2, 3, 5, 1} ,我想將最后4個元素(基本上從索引1傳遞到index4)作為數組傳遞給參數(所以: [2, 3, 5, 1] )。 有沒有辦法非常簡單地做到這一點(比如在Ruby中你可以做arr [1..4]),還是我必須使用for循環?

您可以手動將指針遞增1:

your_function(arr + 1)

C中的指針算法隱含地考慮了元素的大小,因此添加1實際上會增加1 * sizeof(int)

要更接近其他語言的數組切片,請嘗試以下函數:

int *slice_array(int *array, int start, int end) {
    int numElements = (end - start + 1)
    int numBytes = sizeof(int) * numElements;

    int *slice = malloc(numBytes);
    memcpy(slice, array + start, numBytes)

    return slice;
}

它在給定的開始和結束索引之間創建一個數組。 一旦你完成它,請記得free()切片!

回答

鑒於您當前的代碼:

int arr[5] = {10, 2, 3, 5, 1};

您可以通過以下方式復制范圍1..4:

int arr_dup[4];
memcpy(arr_dup,arr+1,sizeof(int)*4);

請記住,您的函數定義應該是一個指針,例如:

void a_function(int *arr_arg); //Call via a_function(arr_dup);

說明

c中的數組實現為指針(也就是保存內存地址的變量)。

如果對指針進行算術運算,它將前進到相應的元素。 例:

ptr + 1 //Next Element
ptr - 1 //Previous Element
#include <stdio.h>
#include <stdlib.h>

void my_function(int arr_size, int *arr)
{
  int i;
  for(i=0; i < arr_size; i++)
    {
      printf("[%d]:%d\n", i, arr[i]);
    }
}

int main(int argc, char **argv)
{
  int arr[] = { 10, 2, 3, 5, 1 };
  (void)my_function(4, &arr[1]); /* TODO > use more flexible indexing */
  return EXIT_SUCCESS;
}

我認為你可以使用memcpymemcpy可以將數據字節復制到byte.In memmory,我們的數據是二進制的,所以即使int是4個字節,我們也可以將它復制到字節。


int dst[4];
memcpy(dst,&arr[1],size(int) * 4);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM