[英]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
的内容。 请注意,指针a
和b
在函数的本地。
另外,请注意关于数组的基本规则是:
“数组不可分配,您必须复制数组中的每个元素。”
您拥有的代码等效于 :
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.