吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1436|回复: 15
收起左侧

[求助] 有关结构体内初始化使用 .xxx的情况

[复制链接]
silverviolet 发表于 2021-1-11 21:47
本帖最后由 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里面很奇怪的发生问题,截图如下,

定义问题.jpg

定义问题.jpg
我不知道应输入表达式算啥错误,之前看了网上大部分的有关结构体先定义后初始化都是类似 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:17
本帖最后由 饮水机 于 2021-1-11 22:19 编辑

方法2的这种赋值方式没见过,也没见别人用过。你确定有方法2这种赋值方式吗?
 楼主| silverviolet 发表于 2021-1-11 22:51
饮水机 发表于 2021-1-11 22:17
方法2的这种赋值方式没见过,也没见别人用过。你确定有方法2这种赋值方式吗?

     方法2是有的,我就是从 韦东山的嵌入式视频s3c2440中有关lcd驱动里看到,然后翻看了他的文档,发现这种初始化方法后看不明白然后百度了下其中某个 CSDN https://blog.csdn.net/perfectionman/article/details/53373664 ,最大的问题是按照这种方式照葫芦画瓢显示E0029错误。
饮水机 发表于 2021-1-11 23:23
本帖最后由 饮水机 于 2021-1-11 23:31 编辑

我测了下,C没问题,可以用,C++不行。你看下源代码,大概率是C写的。C++和C是两种语言,很多地方不一样,不要当一种用。而且C++有严格的类型匹配。这肯定是错的
EnterpriseSolu 发表于 2021-1-12 08:20
.号没有这种用法
object x=new X();
x.SomeMethod();  点号的一种用法
或是x->SomeMethod();  

初始化,点号不能这样用,这是语法规则,没有道理可讲,熟练就习惯了
data_store_object obj = {

.word  = "nihao",
禁闭岛 发表于 2021-1-12 09:04
把你的.cpp文件名后缀改为.c试试
鲸鱼jerry 发表于 2021-1-12 09:18
类型不匹配吗?int* 和void*
xy20200214 发表于 2021-1-12 09:30
gnu c,你使用gcc编译试试
 楼主| silverviolet 发表于 2021-1-12 20:13
EnterpriseSolu 发表于 2021-1-12 08:20
.号没有这种用法
object x=new X();
x.SomeMethod();  点号的一种用法

        书上好像只有结构体成员初始化的时候可以用. 不过那种初始化的. 是struct a.结构体内成员={,,},您说的.号么有这种用法但是下面
初始化,点号不能这样用,这是语法规则,没有道理可讲,熟练就习惯了
data_store_object obj = {

.word  = "nihao",


这又是什么情况呢?我实属门外汉请点拨
 楼主| silverviolet 发表于 2021-1-12 20:14
禁闭岛 发表于 2021-1-12 09:04
把你的.cpp文件名后缀改为.c试试

改了,貌似还是不行,您按我这样输入的能通过吗??
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 04:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表