有关结构体内初始化使用 .xxx的情况
本帖最后由 silverviolet 于 2021-1-11 21:48 编辑下面是一段关于嵌入式 lcd控制的小段代码,使用环境为visual studio 2019。
struct lcd_controller s3c2440_lcd_controller =
{ .init = s3c2440_lcd_controller_init,
.enalbe= s3c2440_lcd_controller_enalbe,
.disable = s3c2440_lcd_controller_disable,};
提问如下 函数体内.init是函数指针吧,右边的s3c2440_lcd_controller_init是函数的话,函数名相当于地址赋值给左边没错,但是这种初始化在我的visual studio里面很奇怪的发生问题,截图如下,
我不知道应输入表达式算啥错误,之前看了网上大部分的有关结构体先定义后初始化都是类似 struct A.xxx={ xxx=aaa,yyy=bbb}这类,也有看到
[*]
#include "fun_in_struct.h"
[*]
int main(int argc, char **argv) {
[*]
//定义结构体指针或者结构体变量,分别用->和.进行内部元素的使用
[*]
data_store_object *obj;
[*]
char *word;
[*]
/*方法一:直接定义结构体指针然后用->对结构体变量和函数进行初始化
[*]
word = "nihao";
[*]
obj= calloc(1,sizeof(data_store_object));
[*]
obj->word= word;
[*]
obj->count = 24;
[*]
obj->word_print= WordPrint;
[*]
obj->count_print = CountPrint;
[*]
obj->word_print(obj->word);
[*]
printf("%d\n",obj->count_print(obj->count));
[*]
return 0;
[*]
*/
[*]
/*方法二:直接定义结构体变量然后直接进行初始化,用 变量 = xxx;进行赋值
[*]
data_store_object obj = {
[*]
.word= "nihao",
[*]
.count = 12,
[*]
.word_print= WordPrint,
[*]
.count_print = CountPrint
[*]
};
[*]
我现在很疑惑,.word也是指针啊,如果按照我的输入,为什么会出错呢?
[*]
主要是结构体内成员初始化用 .xxx= yyy就会发生错误,如果用struct a.b={ccc,ddd}这样的就没问题,应该怎样修改才对?作为一个新手真的相当困惑。
[*]
本帖最后由 饮水机 于 2021-1-11 22:19 编辑
方法2的这种赋值方式没见过,也没见别人用过。你确定有方法2这种赋值方式吗? 饮水机 发表于 2021-1-11 22:17
方法2的这种赋值方式没见过,也没见别人用过。你确定有方法2这种赋值方式吗?
方法2是有的,我就是从 韦东山的嵌入式视频s3c2440中有关lcd驱动里看到,然后翻看了他的文档,发现这种初始化方法后看不明白然后百度了下其中某个 CSDN https://blog.csdn.net/perfectionman/article/details/53373664 ,最大的问题是按照这种方式照葫芦画瓢显示E0029错误。 本帖最后由 饮水机 于 2021-1-11 23:31 编辑
我测了下,C没问题,可以用,C++不行。你看下源代码,大概率是C写的。C++和C是两种语言,很多地方不一样,不要当一种用。而且C++有严格的类型匹配。这肯定是错的 .号没有这种用法
object x=new X();
x.SomeMethod();点号的一种用法
或是x->SomeMethod();
初始化,点号不能这样用,这是语法规则,没有道理可讲,熟练就习惯了
data_store_object obj = {
.word= "nihao", 把你的.cpp文件名后缀改为.c试试 类型不匹配吗?int* 和void* gnu c,你使用gcc编译试试 EnterpriseSolu 发表于 2021-1-12 08:20
.号没有这种用法
object x=new X();
x.SomeMethod();点号的一种用法
书上好像只有结构体成员初始化的时候可以用. 不过那种初始化的. 是struct a.结构体内成员={,,},您说的.号么有这种用法但是下面
初始化,点号不能这样用,这是语法规则,没有道理可讲,熟练就习惯了
data_store_object obj = {
.word= "nihao",
这又是什么情况呢?我实属门外汉请点拨 禁闭岛 发表于 2021-1-12 09:04
把你的.cpp文件名后缀改为.c试试
改了,貌似还是不行,您按我这样输入的能通过吗??
页:
[1]
2