我的代码的简化版本如下:
struct args {
int p;
int *A;
};
typedef struct sort_args sort_args;
void func(int A[], int p)
{
args new_struct = {&A, p};
args *args_ptr = &new_struct;
}
我正在尝试将静态转换(我认为这个术语)已分配的数组转换为指针,但编译器不断抛出这些警告:
警告:初始化从指针生成整数而不进行强制转换 [默认启用] args new_struct = {& A,p,r};
警告:(接近初始化'new_struct.p')[默认启用] 警告:初始化使得指针来自整数而没有强制转换 [默认启用]警告:(接近初始化'new_struct.A') [默认启用]
我做错了什么?
答案 0 :(得分:1)
你的参数倒退了。
args new_struct = {&A, p};
=>
args new_struct = {p, A};
您需要以与结构声明中显示的顺序完全相同的顺序初始化结构的成员,或者您需要使用这样的命名语法:
args new_struct = { .A = A, .p = p };
但这通常仅用于通过具有更多成员的更大结构来提高代码清晰度。