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


问下:

1处是相当于给指针直接赋值了"hello"吗?这么写是不是不对?是不是应该写成:
*x.s = "hello";
这个样子?

2处是否应该为字母h,因为++在后不是应该下一句才生效,本句++不生效吗?

电雨多多
浏览 2352回答 1
1回答

onemoo

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