c - 相同但为什么工作方式不同?

标签 c

我们知道parameter接收参数,也就是我们给parameter赋值。如果是,为什么这个语句 int b[5]=a; 会生成一个名为 invalid initializer 的错误,而 func(a); 没问题?

#include<stdio.h>

void func(int b[5]);

int main(void)
{
    int a[5]={1,2,3,4,5};
    int b[5]=a;
    func(a);
    return 0;
}

void func(int b[5])
{

}

最佳答案

在 C 语言中,数组衰减为指向您正在使用它的上下文中的数组第一个元素的指针。

int b[5] = a;

相当于:

int b[5] = &a[0];

指向 int 的指针不能用于初始化 int 数组。

要将 b 的元素设置为与 a 的元素相同,您有以下选项。

  1. 以不同方式初始化 b

    int b[5] = {a[0], a[1], a[2], a[3], a[4]};
    
  2. 使用memcpy

    int b[5];
    memcpy(b, a, sizeof(a));
    
  3. 一个一个复制a的元素。

    int b[5];
    for (int i = 0; i < 5; ++i )
       b[i] = a[i];
    

我个人的偏好是使用 memcpy

关于c - 相同但为什么工作方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38035624/

相关文章:

c - 在匿名结构中使用宏时出现 Doxygen 警告

c - 如何在 C 中阻止信号?

c - 循环 "enter student id:"语句

c 如何编写一个程序来计算句子中有多少个单词而不使用字符串

c - 为什么 pthread 返回的值与传递给线程函数的值不同?

c - 从文件读取到链表 C

c - 如果我有这样的c语言消息 ".exe has stopped working"?

c - 为什么这些构造使用增量前和增量后未定义的行为?

c++ - 并发执行进程

c - 异或/或运算符?