返回介绍

(*t).age 和*t.age

发布于 2024-10-10 23:21:28 字数 2768 浏览 0 评论 0 收藏 0

为什么

*t 外面一定要加括号?因为(*t).age 与*t.age 完全是两个不同的表达式。

表达式*t.age 等于*(t.age) 。请思考一下表达式*(t.age) 的含义。它代表“t.age 这个存储器单元中的内容”,但 t.age 不是存储器单元。

使用结构时要小心括号的位置,它们会影响表达式的值。

试驾

检查程序有没有错误:

太棒了,现在函数正确工作了。

通过传递结构指针,函数更新了原来的数据,而不是修改本地的副本。

是的,还有一种表示结构指针的方法,它更易于阅读。

为了把括号放对地方,在处理指针时需要非常谨慎,因此 C 语言的发明者设计了一种更简洁、更易于阅读的语法。下面两个表达式含义相同:

t->age 表示“由 t 指向的结构中的 age 字段”,也就是说 happy_birthday() 函数还能这么写:void happy_birthday(turtle *a){ a->age = a->age + 1; printf("Happy Birthday %s! You are now %i years old!\n", a->name, a->age);}




保险箱窃贼

嘘……夜深了,这里是银行的金库。你能把密码轮旋转到正确的位置,破解保险箱吗?研究以下代码,看能不能找到正确的组合,偷到金子。小心!有个类型叫 swag ,有个字段也叫 swag 。银行用以下语句创建了保险箱:哪种组合能让你得到字符串“GOLD!”?从每一栏中选择一个单词或符号,组成表达式。

 这里没有蠢问题问:为什么计算机要把值复制给形参变量?答:计算机通过把值赋给函数形参的方式向函数传值,所有赋值都会复制值。问:为什么*t.age 与(*t).age 的含义不同?答:因为计算机先对“点”运算符求值,然后对* 运算符求值。

 

保险箱窃贼解答

嘘……夜深了,这里是银行的金库。你把密码轮旋转到正确的位置,破解了保险箱。你研究了以下代码,找到了正确的组合,顺利偷到了金子。银行用以下语句创建了保险箱:哪种组合能让你得到字符串“GOLD!”?从每一栏中选择一个单词或符号,组成表达式。

 

要点

当调用函数时,计算机会把值复制给形参变量。
可以像创建其他类型的指针那样创建结构指针。
“指针

-> 字段”等于“(*指针).字段”。

“-> ”表示法省掉了括号,代码更易阅读。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文