快捷导航

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


问下:
1处是相当于给指针直接赋值了"hello"吗?这么写是不是不对?是不是应该写成:
*x.s = "hello";
这个样子?
2处是否应该为字母h,因为++在后不是应该下一句才生效,本句++不生效吗?

免责声明:本内容仅代表回答者见解不代表本站观点,请谨慎对待。

版权声明:作者保留权利,不代表本站立场。

回复

使用道具 举报

参与会员1


  • 原文是对的。
    将字符串赋值给字符指针是可以的,这相当于让指针指向字符串的首字符。或者换一种解释:字符串就是字符数组,而这样赋值过程中会让数组隐式转型为指向首元素的指针,所以实际上这里发生的就是指针间的赋值,是合法的。
    但是这个例子不太好,因为这是让普通字符指针指向字符串常量。因为字符串常量是不可修改的,而让一个 char 指针指向它之后,就有可能写出通过 s 修改这个字符串的代码。这将会引起运行时错误,应该避免这样的用法。 更合适的写法是让字符常量指针(const char *)来指向字符串常量。 但编译器不会就此问题报错,所以原题中的代码也算合法,只是有隐患而已。
    可如果写成*x.s = "hello",那么 *x.s 是解引用了 s 指针,得到的是 char 类型(就是 s 所指的字符'h'),后面再将字符串常量赋值给字符类型就不对了。
  • 你是对的。
    运算顺序是这样的: p->s 得到的是 s,再经过后置自增++ 得到的值还是 s 自增前的值(当然 s 最终会自增),最后再解引用* 得到 s 自增前所指的字符。s 一开始指向的就是"hello"中的第一个字符 h,所以会得到 h。


回复

使用道具 举报

可能感兴趣的问答

发新帖
  • 微信访问
  • 手机APP