+ -
当前位置:首页 → 问答吧 → 看个题:设"char **s;

看个题:设"char **s;

时间:2011-12-08

来源:互联网

设"char **s;",以下正确的表达式是(2)。
 a.s="computer";
 b.*s="computer";
 c.**s="computer";
 d.*s='c';

——————————————
解释下!!!谢了!
——————————————
有人这么说,对么?:
s是存放*s地址的指针变量,那么*s就是存放的"computer"的首地址,即char=**s;
*s="computer",

作者: c87527124   发布时间: 2011-12-08


选b(在已分配了内存的情况下)

s是char* * 即指向char*的指针
*s是char* 可以指向""(最好用const char*)

你区分不开类型的话你就看定义好了
char **s;

看定义的话*s就是char* 
**s就是char

作者: sryan   发布时间: 2011-12-08

楼上正解

作者: duzhongming   发布时间: 2011-12-08

还是不懂,请大侠说详细点啊……

作者: c87527124   发布时间: 2011-12-08

有人这么说,对么?:
s是存放*s地址的指针变量,那么*s就是存放的"computer"的首地址,即char=**s;
*s="computer",

作者: c87527124   发布时间: 2011-12-08

解释没问题!

作者: cicy821   发布时间: 2011-12-08

*s="computer" 对

作者: tony2278   发布时间: 2011-12-08

求详细说明!菜鸟!

作者: c87527124   发布时间: 2011-12-08

引用 4 楼 c87527124 的回复:

有人这么说,对么?:
s是存放*s地址的指针变量,那么*s就是存放的"computer"的首地址,即char=**s;
*s="computer",


s只是一个变量而已 跟int char之类的没区别
区别就是有解引用操作符和一些移位运算

当把为char**类型的a变量解引用后,就会寻找到a指向的那块内存(已经分配好内存,不然会出错),然后就可以操作那块内存了,该内存存储类型为char*,即对该内存还能做解引用之类的操作,也可以直接修改该内存的值,""就是const char*,然后那块内存的值就是""静态常量区的字符串首地址了

作者: sryan   发布时间: 2011-12-08

S是个2级指针,2级指针是用来指向一级指针的。
使用2级指针时,如正常的指针一样使用"*"号,进行解引用操作。
所以针对楼主这个问题.
*s;相当于一个char* p(为了区别,不使用s);
请问楼主,对于p="computer";你有疑问么?
此时可以进行这样的操作.
p="computer";
s=&p;
这时*s得出p的地址,**s得出"computer"的地址

作者: mymixing   发布时间: 2011-12-08

自己看吧:
C/C++ code
//选项|表达式左边的变量类型|表达式         |表达式右边的常量类型
//----+--------------------+---------------+--------------------
// a. |char **             |  s="computer";|const char *
// b. |char *              | *s="computer";|const char *
// c. |char                |**s="computer";|const char *
// d. |char *              | *s='c';       |const char

作者: zhao4zhong1   发布时间: 2011-12-08

不推荐这样使用,更不推荐这道题目,这道题目代码本身就有些问题(不标准):
看如下代码:
char *p = "fafafa";
*p = 'a';
在vs2008 下编译没有问题,但是在运行时就会报错;
我是新手,可能说的不准确,不过感觉对于这样的问题最好避免下,不然代码出错很难维护的。
正确应该这样写:
const char *p = "fafafa";
然后你在写
*p = ‘a’时编译就会报错,很方便查找错误;

作者: zhengw060024   发布时间: 2011-12-08

8、9楼,我基本懂了。
10L,这不是在教人更深入的知识吧;谢了。
11L,报错是因为char *p = "fafafa",fafafa在静态常量区,不能修改。
----------------------------------
 char *p="abc"; 
 cout<<p<<" "<<*p<<endl;
------------
输出:abc a
------------------------
为什么输出abc???

作者: c87527124   发布时间: 2011-12-09