繁体   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