簡體   English   中英

將數組作為參數傳遞給函數

[英]passing Array as argument to function

我對傳遞數組作為函數的參數有疑問,我的代碼如下,

  #include <stdio.h>
  #include <string.h>

  void str_cpy(char a[], char b[])
  {
     a = b;
     printf("%s\n", a);
  }

  int main()
  {
     char a[] = "hello";
     char b[] = "world";

     str_cpy(a, b);
     printf ("%s\n", a);
     return 0;
  }

在上面的代碼中,我將數組傳遞給函數是通過引用傳遞,因此它應在主函數中打印“ world”,因為我在函數定義中將b的值賦給a即a = b,但不是,所以請幫忙我 ..

當您傳遞數組以起作用時。 它衰減為指向數組第一個元素的指針。

您的函數str_cpy()僅將傳遞的指針a指向另一個指針b 它不會修改原始字符數組a的內容。 請注意,指針ab在函數的本地。

另外,請注意關於數組的基本規則是:
“數組不可分配,您必須復制數組中的每個元素。”

您擁有的代碼等效於

 char a[] = "hello";
 char b[] = "world";

 char *ptr1 = a;
 char *ptr2 = b;

 ptr1 = ptr2;

 printf("[%s]",a);

它不會更改原始數組的內容,而只是將指向該數組的指針指向另一個數組。

strcpy()提供的功能是將一個數組的每個元素復制到另一個數組。 您應該只使用標准庫提供的功能。

您的str_cpy()函數可以寫為:

void str_cpy(char *a, char *b)
{
    a = b;
    printf("%s\n", a);
}

從語義上講,這等效於您所寫的內容。 你寫的和我寫的沒有操作上的區別。 數組作為指向數組第一個元素的指針傳遞。 它們是方便地初始化的本地指針變量。 在該函數的范圍,你讓a點到同一個地方b做,但這並不影響陣列中main()程序。

要在C中復制數組,您必須依次復制每個元素:

void str_cpy(char *a, char *b)
{
    while ((*a++ = *b++) != '\0')
        ;
    printf("%s\n", a);
}

您將其解釋為錯誤,它實際上是pass by value

void str_cpy(char a[], char b[]) // it's same as str_cpy(char *a,char *b)
  {
     a = b;
     printf("%s\n", a); // here it will print "world" because it's a local
              // change in a but actually in main a still contains "hello"
  }

由於使用的是<string.h> ,因此可以直接使用strcpy(a,b);

或者,嘗試執行類似的操作,將一個字符一個字符地復制到目標數組中。

str_cpy(char *a,char *b)
{
 while(*b != '\0')
  {
  *a=*b;
  a++;
  b++;
  }
}

但是如果數組a沒有足夠的空間來保留復制的字符,則可能是一個問題。

暫無
暫無

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

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