首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的Struct不能在C中通过点符号检索正确的信息?

在C语言中,Struct是一种自定义的数据类型,用于组织和存储不同类型的数据。它可以包含多个成员变量,每个成员变量可以是不同的数据类型。

然而,在C语言中,Struct的成员变量不能通过点符号直接检索正确的信息,这是因为Struct是一种复合数据类型,它在内存中以连续的方式存储各个成员变量。要访问Struct的成员变量,需要使用成员运算符"->"或"."。

当我们定义一个Struct类型的变量时,实际上只是为这个变量分配了一块内存空间,这个内存空间可以容纳Struct的所有成员变量。通过成员运算符"->"或".",我们可以访问这个内存空间中的具体成员变量。

使用"->"运算符时,需要将Struct类型的指针作为操作数,通过指针找到Struct变量所在的内存空间,然后再通过"->"运算符访问具体的成员变量。

使用"."运算符时,需要将Struct类型的变量作为操作数,编译器会自动将变量转换为指向该变量的指针,然后再通过"."运算符访问具体的成员变量。

以下是一个示例代码,演示了如何使用"->"和"."运算符访问Struct的成员变量:

代码语言:txt
复制
#include <stdio.h>

// 定义一个Struct类型
struct Person {
    char name[20];
    int age;
};

int main() {
    // 定义一个Struct类型的变量
    struct Person person;

    // 使用"."运算符访问成员变量
    strcpy(person.name, "John");
    person.age = 25;

    // 使用"->"运算符访问成员变量
    struct Person *ptr = &person;
    printf("Name: %s\n", ptr->name);
    printf("Age: %d\n", ptr->age);

    return 0;
}

在上述代码中,我们定义了一个Struct类型的变量person,并使用"."运算符给成员变量name和age赋值。然后,我们定义了一个指向person的指针ptr,并使用"->"运算符访问成员变量name和age,并打印出它们的值。

需要注意的是,如果我们尝试在C语言中直接使用点符号检索Struct的成员变量,编译器会报错,因为C语言不支持这种操作。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云云数据库MySQL版:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云云存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网平台(IoT):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发平台(MTP):https://cloud.tencent.com/product/mtp
  • 腾讯云区块链服务(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Objective-C 接受符号

不管怎么样样,符号还是可以。 好了,这是曾一直是符号坚定反对者。认为它掩盖了消息传递,并鼓励程序员通过链式语法来违反 "得墨忒耳定律(Law of Demeter) "。...甚至将符号描述为 Objective-C 代码一种气味。 因此,你可能会惊讶地发现,最近在代码采用了点符号!事情是这样......在观念转变之前 有两个编码习惯让你们一些人觉得很奇怪: 对于一个属性,更倾向于通过 ivar 进行访问。 当然,也没有使用符号。 有人说,"访问属性时一定要使用 self."。...知道这一,但制作录屏视频时却有人评论说:"你为什么直接访问 ivars?"这让很不舒服。因此,通过采用符号希望代码能减少干扰,这样你就能专注于我试图展示原理。...符号:仍在关注得墨忒耳定律 仍然时刻关注着符号数量,对得墨忒耳定律保持着敏感。连锁仍然散发着恰当亲密关系味道。

10110

​面试常问16个C语言问题,你能答上来几个?

第二、static修饰全局变量时候,这个全局变量只能在本文件访问,不能在其它文件访问,即便是extern外部声明也不可以。...(3)静态数据成员可以被初始化,但是只能在类体外进行初始化,若为对静态数据成员赋初值,则编译器会自动为其初始化为0 C语言学习资源汇总【最新版】 (4)静态数据成员既可以通过对象名引用,也可以通过类名引用...ps:即所谓高手写程序不容易死); 2:使编译器保护那些希望被修改参数,防止无意代码修改,减少bug; 3:给读代码的人传递有用信息,声明一个参数,是为了告诉用户这个参数应用目的; const...用这个来开始讨论这样一问题,看看被面试者是否想到库例程这样做是正确。 得到正确答案固然重要,但解决问题方法和你做决定基本原理更重要些。...(如果有的话)为什么? 考察: 这是一个非常微妙问题,任何人答对这个问题(正当原因)是应当被恭喜。答案是:typedef更好。

1.1K20
  • C语言】自定义类型(结构体、位段、枚举、联合体)

    唯一不同是,结构体是通过我们自己去定义,而int这些类型是我们c语言内置类型 1.1.3特殊结构体声明(匿名结构体) struct { int a; char b; float c; }x...(struct S4)); 结果正好为32字节 1.6为什么存在结构体内存对齐 平台原因(移植原因):不是所有的硬件平台都能访问任意地址任意数据;某些硬件平台只能在某些地址处取某些特定类型数据...1:请通过调试,观察内存窗口中,变量s存储形式 struct S { char a : 3; char b : 4; char c : 5; char d : 4; }; int main()...: 我们不可以向下面这样写代码 enum color c = 2;//因为枚举类型和整型类型是兼容,代码有错误 3.2枚举类型优点 我们明明可以使用#define定义,但为什么要搞一个枚举类型捏?...,从而导致链接失败,或是链接后产生错误执行结果,链接器在静态函数库查找符号时,将按顺序查找静态函数,找到某个匹配符号后,就不会查找其它函数库是否含有相同符号名。

    57730

    lnk2019无法解析外部符号_declspec_error lnk1120无法解析外部命令

    1.前言 error LNK2019: 无法解析外部符号这个错之前见过很多次,能知道最根本原因在于链接过程没有搜索到程序用到库文件,即*.lib。...: 无法解析外部符号 “void __cdecl jpeg_finish_compress(struct jpeg_compress_struct *)” (?...已经确信所有的依赖库文件都已经正确加载,为什么还会出现这个问题??? 本文重点归纳error LNK2019出现原因,并提供相应解决办法。...一直采用32Bit操作系统进行VITK开发,因为兼容国外一个开源程序法,更换了64Bit系统! 用过VITK的人都知道,在使用他们是必须在当前环境下进行编译生成*.lib和*.dll文件。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1.7K20

    C语言】一篇速通结构体

    注意:(->)指向操作符是一种通过指针方式去访问结构体内成员一种便捷写法反方式。...如下代码所示↓ struct Book { int id; struct Book* book;//指针变量大小固定可算 } 上述代码才是自引用使用正确, 自引用不是包含同类型结构体变量...为什么存在内存对齐  平台原因→移植原因:不是所有的硬件平台上都能访问任意地址上任意数据,某些硬件平台上只能在某些地址处某些特定数据,不然会抛出硬件异常。...位段和结构体声明都是类似的,但是有两不同↓ 位段成员必须是 整形类型(int)、无符号整形类型(unsigned int)、有符号整形类型(signed int) 位段成员名后面是有一个冒号...那么在这里我们到底是用了32个比特位当中,还是先用到15个比特位再用到32个当中比特位。 这个实际上在C语言当中是不确定因素,因此为什么说位段是跨平台

    42330

    C语言篇】结构体和位段详细介绍

    如果正确,那 sizeof(struct Node) 是多少? 仔细分析,其实是,因为⼀个结构体再包含⼀个同类型结构体变量,这样结构体变量⼤ ⼩就会⽆穷⼤,是不合理。...正确⾃引⽤⽅式: struct Node{ int data; struct Node* next; }; 在结构体⾃引⽤使⽤过程,夹杂了 typedef 对匿名结构体类型重命名,...结构体成员直接访问是通过操作符.访问。...;某些硬件平台只能在某些地址处取某些特定类型数据,否则抛出硬件异常。...位段跨平台问题 int位段被当成有符号数还是⽆符号数是不确定。 位段中最⼤位数⽬不能确定。(16位机器最⼤16(sizeof(int)=2),32位机器最⼤32。

    8110

    初级程序员面试不靠谱指南(三)

    说&是指针好基友其实恰当,因为&这个符号C/C++不止有一种含义,但是因为其经常会和指针一起出现在被问问题列表上,所以,在大部分情况下,它们是好基友,那么&符号一共有哪些涵义呢?...有一需要强调是,在C语言中,不能使用类似swap1(int &i,int &j)这样形式,因为C语言中没有按址传递概念,它通过传递指针实现按址传递,但是其本质还是传递值,只不过传递是一个地址值...希望下面的例子能多少表达一想说意思。...那为什么要加一个const呢?从2也可以看到,如果采用const的话,传入变量有会被改变,所以使用const可以保证不会被误操作而发生改变。...可以看到,输出a值并不正确了,查看一下各个函数地址信息,a所得到值正是第一个函数返回引用值(地址相同),但是第二个函数调用以后,可以看到x也用了第一个函数i地址,此时a所表示变量也在这个地址之中

    72590

    自定义类型:结构体

    如果正确,那 sizeof(struct Node) 是多少? 仔细分析,其实是不行,因为一个结构体再包含⼀个同类型结构体变量,这样结构体变量大小就会无穷大,是不合理。...正确自引用方式如下: struct Node { int data; struct Node* next; }; 在结构体自引用使用过程,夹杂了 typedef 对匿名结构体类型重命名,也容易引入问题...结构体成员访问操作符 2.1 结构体成员直接访问 结构体成员直接访问是通过操作符(.)访问操作符接受两个操作数。...;某些硬件平台只能在某些地址处取某些特定类型数据,否则抛出硬件异常。...回顾: 通过这里分析,相信你也可以明白这里刚开始讲位段时那个例子为什么是8个字节而不是6个字节了。 6.3 位段跨平台问题 int 位段被当成有符号数还是无符号数是不确定

    10710

    【熟视C语言】自定义类型之结构体详解(内存对齐,位段)

    例子: //错误示范 typedef struct { int num; Example* next; }Example; //正确示范 typedef struct Example...S4));//计算结构体S4大小 在分析完以上几个结构体存储时,我们发现内存对齐有时可能会浪费大量空间,可能会有人会有疑问,既然内存对齐会造成那么大空间浪费,那为什么当初设计时候要这样设计呢...代码运行结果 2.3位段跨平台问题 int被当成有符号数还是无符号数是不确定。...上文代码情况就是被编译器当作有符号数。 位段最大位数不确定。如16位机器最多16和32位机器最多,写有27位成员位段显然不能在16位机器上运行。...结语 好,到这里,自定义类型第一部分也就是最长最难啃部分就完结了,非常感谢各位读者能读完这篇文章,如果你觉得做还不错的话,可以赞收藏分享,让更多朋友知道,当然,如果你觉得有什么问题的话也欢迎在评论区留言或私信告诉

    18510

    联合体类型和枚举类型

    每⼀种商品都有:库存量、价格、商品类型和商品类型相关其他信息。...因为对于礼品兑换单商品来说,只有部分属性信息是常⽤。⽐如: 商品是图书,就不需要design、colors、sizes。...枚举依然能像结构体和联合体一样在;前面创建变量(创建类型同时创建变量) 这大概就是枚举主要知识,当然它还有更多细节,对于这些细节就不讲了(实在有点多),这里有篇好文推荐下,大家可以去看下C...语言枚举类型enum(全面详细直观)_enum c语言-CSDN博客 讲枚举知识比我详细多,(这只是讲一下主要知识,没更深涉及了,你应用枚举基本上也就是应用到我这上面讲知识) 枚举优点...便于调试,预处理阶段会删除 #define 定义符号 4. 使⽤⽅便,⼀次可以定义多个常量 5. 枚举常量是遵循作⽤域规则,枚举声明在函数内,只能在函数内使⽤。

    10710

    掌握C语言结构体,开启编程新世界

    这也是一个常考知识。 4.1 对齐规则 ⾸先得掌握结构体对⻬规则: 1....5.0 结构体传参 通过上面的学习我们知道,结构体所占字节一般都是很大,所以在函数应用过程,往往会采用传址,传地址只需要4\8个字节,不需要开辟那么大空间;传值浪费空间,需要拷贝,占空=空间是比较大...结构体位段允许程序员指定一个变量只占用指定位数内存空间,而不是整个字节或字。这种灵活性允许在一个字节或字存储多个不同位级信息,从而节省内存空间。...位段涉及很多不确定因素,位段是跨平台,注重可移植程序应该避免使⽤位段。...12; s.c = 3; s.d = 4; 5.4 位段跨平台问题 int 位段被当成有符号数还是⽆符号数是不确定

    12510

    C语言:预处理详解

    一、预定义符号 C语⾔设置了⼀些预定义符号,可以直接使⽤,预定义符号也是在预处理期间处理。...(a):(b)) 那为什么⽤函数来完成这个任务? 6.1 宏优势 1. ⽤于调⽤函数和从函数返回代码可能⽐实际执⾏这个⼩型计算⼯作所需要时间更多。...//int*const p3=&c 因为int*这个类型是一个整体不能分开 上述代码, const INTPTR1 p1是一个常量指针,即不可以通过p1去修改p1指向内容,但是p1可以指向其他内容。...#endif //__DEBUG__ } return 0; } 易错: a==10,明明是真的,为什么还是编译?? 因为条件编译语句在预处理时候就已经做出判断了!...用于自定义编译信息 //(2)#pragma once 用于保证头文件只被编译一次 //(3)#pragama pack用于指定内存对齐(一般用在结构体)struct占用内存大小 #line//

    33810

    嵌入式C语言面试题_c语言基础面试题

    goto Loop 用法: 基本上c语言中推荐goto使用,不符合程序化设计理念,呵呵。...顺带提一句,也许你可能会问,即使不用关键字 const,也还是能很容易写出功能正确程序,那么为什么还要如此看重关键字const呢?...2) 通过给优化器一些附加信息,使用关键字const也许能产生更紧凑代码。 3) 合理地使用关键字const可以使编译器很自然地保护那些希望被改变参数,防止其被无意代码修改。...原因 是当表达式存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此-20变成了一个非常大正整数,所以该表达式计算出结果大于6。...这一对于应当频繁用到无符号数据类型嵌入式系统来说是丰常重要。如果你答错了这个问题,你也就到了得不到这份工作边缘。 13.

    86110

    500行代码实现贪吃蛇(1)

    mode con cols=100 lines=30 也可以通过命令设置控制台窗口名字: title 贪吃蛇 这些能在控制台窗口执行命令,也可以调用C语言函数system来执行。...HANDLE GetStdHandle(DWORD nStdHandle); 1.5 GetConsoleCursorInfo 检索有关指定控制台屏幕缓冲区光标大小和可见性信息 BOOL WINAPI...但是不管怎样,所有这些编码方式,0–127表示符号是⼀样⼀样只是128–255这⼀段。 至于亚洲国家文字,使用符号就更多了,汉字就多达10万左右。...本地化 提供函数用于控制C标准库对于不同地区会产生⼀样行为部分。...在任意程序执行开始,都会隐藏式执行调用: setlocale(LC_ALL, "C"); 当地区设置为"C"时,库函数按正常方式执行,小数点是一个

    13510

    C#7.2 新增功能

    它们旨在尽量减少值类型复制,而造成与引用类型使用相关内存分配,进而提升性能。 功能包括: 针对实参 in 修饰符,指定形参通过引用传递,但不通过调用方法修改。...将 ref 修饰符添加到现有 struct 声明是兼容更改。 ref struct 不能是类成员,也不能用于可能在堆上分配其他位置。 可以在编写安全高效代码详细了解所有这些更改。...02 非尾随命名参数 方法调用现可使用位于位置参数前面的命名参数(若这些命名参数位置正确)。 有关详细信息,请参阅命名参数和可选参数。...03 数值文字前导下划线 C# 7.0 实现了对数字分隔符支持,但这不允许文字值第一个字符是 _。 十六进制文本和二进制文件现可以 _ 开头。...例如,你将编写以下内容以检索对两个数组之一第一个元素引用: ref var r = ref (arr != null ?

    85210

    抽丝剥茧C语言(初阶 下)

    ,并不是你输入法打出来一个➗才是除号,而是要取键盘上键打出来符号C语言定义,/ 这个符号就是除号,其他符号也是一样,虽然看起来和你手写不一样,但他定义就是这个意思。...那么为什么结果不正确呢?是因为在C语言规定,两个数据相除,如果想得到浮点数(也就是小数,之所以叫浮点数,是因为小数点可以移动,所以叫做浮点数)那么 / 两边必须有一个浮点数才行!...逻辑与这个符号,两边需要都为真(非零)才能通过,一个真一个假(为零)或者是都为假则不能通过。 逻辑或这个符号,两边只要有一个为真就能通过,两个真也可以,两个假就不行了。 条件操作符 exp1 ?...其实这是指针大小,我们上面说过了,所以不要在意指针变量前面的是什么类型,这个以后会说用处,不要急。 结构体 结构体是C语言中特别重要知识,结构体使得C语言有能力描述复杂类型。...下面我们来看看结构体初始化和使用方法: //打印结构体信息 #include struct Stu//前面是定义结构体声明关键字,后面是自定义标识符 { char name[20

    25500

    iOS面试资料参考答案总结

    这也是为什么上篇面试总结,会加了一些面试技巧,整理面试题时,也没提他们是出自哪家公司,就是希望大家把题目区别看待。...总结不易,希望这份参考答案能对你有所帮助,如果想持续关注,欢迎订阅微信公众号:iOS进阶宝典。 面试题及参考答案 Swift 1、Swiftstruct和class有什么区别?...我们不能在非主线程将内容绘制到layercontext上,但我们单独开一个子线程通过 CGBitmapContextCreateImage() 绘制内容,绘制完成之后切回主线程,将内容赋值到contents...至于什么情况会存储到堆上,没想到,有知道同学可以告知一下。 3、数据库事务是什么意思? 事务就是访问并操作各种数据项一个数据库操作序列,这些操作要么全部执行,要么全部执行。...8、设计一套数据库方案,实现类似微信搜索关键词能快速检索出包含该字符串聊天信息,并展示对应数量(聊天记录数据量较大) 可以对聊天记录文本值加上索引。

    1.6K40

    2020年6月最新iOS面试题总结(答案篇)

    这也是为什么上篇面试总结,会加了一些面试技巧,整理面试题时,也没提他们是出自哪家公司,就是希望大家把题目区别看待。...总结不易,希望这份参考答案能对你有所帮助,如果想持续关注,欢迎订阅微信公众号:iOS成长之路。 面试题及参考答案 Swift 1、Swiftstruct和class有什么区别?...Objective-C block实现 2、GCDBlock是在堆上还是栈上?...我们不能在非主线程将内容绘制到layercontext上,但我们单独开一个子线程通过CGBitmapContextCreateImage()绘制内容,绘制完成之后切回主线程,将内容赋值到contents...8、设计一套数据库方案,实现类似微信搜索关键词能快速检索出包含该字符串聊天信息,并展示对应数量(聊天记录数据量较大) 可以对聊天记录文本值加上索引。

    9.2K41

    C++】踏上C++学习之旅(二):缺省参数和函数重载(内含函数重载底层原理)

    那么在本章 ,我们继续讲解一些在C语言中无法解决问题,来看看本贾尼大佬(C++创造者)是怎么解决这些问题。 1. 缺省参数 1.1 为什么要有缺省函数?...a = 10, int b, int c = 30); 缺省参数不能在函数声明和定义同时出现。...很多人可能对这点不是很理解这个,那接下来给大家讲明白这个。...兑现承诺就相当于把地址填入到这个表格!!! 好了,讲了这么多,回归我们主体:为什么C++支持函数重载,而C语言却不支持呢? 如果你对上述讲法理解的话,那么接下来这段话就十分关键了。...也就是在符号可以填入不同函数标记,这个特性就是得C++能够支持函数重载。 接下来来证明给大家看看,由于VS编译器将编译链接这个过程给集成化了,所以我用g++编译器给大家显示。

    8610
    领券