为了账号安全,请及时绑定邮箱和手机立即绑定

C语言结构体指针成员的引用问题

C语言结构体指针成员的引用问题

电雨多多 2017-09-18 00:47:19
问下: 1处是相当于给指针直接赋值了"hello"吗?这么写是不是不对?是不是应该写成: *x.s = "hello"; 这个样子? 2处是否应该为字母h,因为++在后不是应该下一句才生效,本句++不生效吗?
查看完整描述

1 回答

?
onemoo

TA贡献883条经验 获得超454个赞

  1. 原文是对的。

    将字符串赋值给字符指针是可以的,这相当于让指针指向字符串的首字符。或者换一种解释:字符串就是字符数组,而这样赋值过程中会让数组隐式转型为指向首元素的指针,所以实际上这里发生的就是指针间的赋值,是合法的。

    但是这个例子不太好,因为这是让普通字符指针指向字符串常量。因为字符串常量是不可修改的,而让一个 char 指针指向它之后,就有可能写出通过 s 修改这个字符串的代码。这将会引起运行时错误,应该避免这样的用法。 更合适的写法是让字符常量指针(const char *)来指向字符串常量。 但编译器不会就此问题报错,所以原题中的代码也算合法,只是有隐患而已。

    可如果写成 *x.s = "hello",那么 *x.s 是解引用了 s 指针,得到的是 char 类型(就是 s 所指的字符'h'),后面再将字符串常量赋值给字符类型就不对了。

  2. 你是对的。

    运算顺序是这样的: p->s 得到的是 s,再经过后置自增++ 得到的值还是 s 自增前的值(当然 s 最终会自增),最后再解引用* 得到 s 自增前所指的字符。s 一开始指向的就是"hello"中的第一个字符 h,所以会得到 h。


查看完整回答
反对 回复 2017-09-18
  • 1 回答
  • 1 关注
  • 2351 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信