gpt4 book ai didi

c - "array"和 "&array[0]"可以完全互换吗?

转载 作者:行者123 更新时间:2023-12-02 06:52:00 37 4
gpt4 key购买 nike

是的,之前已经问过很多次了,但我想知道哪个更可取?

typedef struct {
int a;
int addr[8];
} usr_command;

usr_command* p_usr_command;

int foo(int* parameter)
{}

那么哪一个更不容易出现问题?

foo(p_usr_command->addr);

foo(&p_usr_command->addr[0]);

?

最佳答案

this 情况下(传递数组名称 vs. 传递数组中第一个对象的地址 作为函数参数),两个片段是等价的。

引用 C11,第 §6.3.2.1 章,左值、数组和函数指示符(强调我的)

Except when it is the operand of the sizeof operator, the _Alignof operator, or the unary & operator, or is a string literal used to initialize an array, an expression that has type ‘‘array of type’’ is converted to an expression with type ‘‘pointer to type’’ that points to the initial element of the array object and is not an lvalue. [....]

但是,总的来说,它们不一样

  • array 是一个 array 类型的 int [8]
  • &(array[0]) 是一个指针,输入 int *

正如 EOF in his comment 所建议的那样,尝试将这两个变体传递给 sizeof 运算符并检查结果以获得动手输出。

关于c - "array"和 "&array[0]"可以完全互换吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41329242/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com