请大家指点,c语言中,结构体作为形参传递且结构体中含有二维数组

typedef struct
{
u8 z[3][3];
}Data
void abcd(Data data)
{
data->z[0][0]=3;
}
/
*********************以上均没报错****************************/
void efgh(Data data)
{
data->z[1][1]=2;
abcd(&data);//出错
}
/
************************此句报错**************************************/
..\HARDWARE\CROSS\cross.c(83): error: #167: argument of type "
data **" is incompatible with parameter of type "data *"
程序大致就是这样定义的,不知道该怎么改,卡了好久,请大家帮帮忙,谢谢。

3个回答

把&去掉,因为你穿入的参数多了一维

weixin_38224294
西瓜太溜 回复weixin_38224294: 还是有点不明白,以前用结构体里有一维数组时,加了&符号,那么二维数组为什么就不用加取指符号
3 年多之前 回复
weixin_38224294
西瓜太溜 回复学习与思考_昱: 真的谢谢,已经成功了。
3 年多之前 回复
a29562268
坤昱 回复西瓜太溜: 你的调用函数方法在哪里
3 年多之前 回复
a29562268
坤昱 举个例子 int a;你要把a的地址传进去 ,相当于传个指针 用&a(取地址) 他的作用就和指针一样,因为你传入得参数刚好对上,所以加了&相当于多了一维。
3 年多之前 回复
weixin_38224294
西瓜太溜 错为*** error 65: access violation at 0x1FFFFF14 : no 'write' permission
3 年多之前 回复
weixin_38224294
西瓜太溜 回复weixin_38224294: 但是仿真还是出错。
3 年多之前 回复
weixin_38224294
西瓜太溜 为什么多了一维,要把&去掉呢。而且我去掉后就不报错了。
3 年多之前 回复

自顶,以前这么用过结构体中含有一维数组的,没出错。是结构中含有的二维数组所以出错吗?请大家指教。谢谢

weixin_38224294
西瓜太溜 回复战在春秋: unsigned char
3 年多之前 回复
fight_in_dl
战在春秋 u8是什么?
3 年多之前 回复
  1. 下面这段肯定会报错,“->”指向运算符是用于结构体指针来指向结构体成员;你只是定义了一个结构体变量,应该用成员运算符“.”;

```void abcd(Data data)
{
data->z[0][0]=3;
}

void efgh(Data data)
{
data->z[1][1]=2;
abcd(&data);//出错
}

所以,你把这两个函数中的“->”换为“.”来访问结构体中的成员,就不会出错了;
2.“u8”什么类型?我想应该是

typedef int u8;



weixin_38224294
西瓜太溜 回复weixin_38224294: 还有我将“->”改为“.”了,结果这句也报错了。
3 年多之前 回复
weixin_38224294
西瓜太溜 u8 为unsigned char;还有我结构体中定义了很多数组,上面这个程序我只是表达一下大致意思。并不是源程序;
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问