中兴校园招聘面试:C++初级指针例题一道,谢谢大家~!

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 13:29:47
设有说明语句"char*s[]={"Student","Teacher","Father","Mother"},*ps=s[2];",
执行语句"cout<<*s[1]<<''<<ps<<''<<*ps<<'\n';"输出的结果是
T Father F
请解释一下 ps *s[1] *ps的区别~!谢谢~!

首先要知道这个s是字符指针数组,其中每一个项都是一个字符串的首地址.
如 s[0]="Student"的首地址 s[1]="Teacher"的首地址

这样s[0]实际上是"Student"这个字符数组的首地址,也就是说假设
char* ss="Student",那么s[0]=ss=ss[0],
所以*s[1]='T'.

由于ps是char*类型的,也就是char *ps,所以ps实际是一个字符数组的指针(首地址),而ps=s[2],这样将ps赋值成"Father"这个字符数组的首地址了,因此在cout中输出字符数组是"Father"

*ps是取ps这个字符数组的首元素的值,因此相当于ps=ps[0]=&'F',所以*ps='F'

说了半天,总结一下,一个字符串(也就是字符数组)的首地址就是这个字符串首字符的存储地址,如char* str="aaa";则*str=*str[0]='a',把握住这个就不会错了.

最后提醒一下,数组的首地址只要不是动态分配的,那么它就是常量不能改变.如int a[2]={1,2};a++;这样是错的,但是int* p=a;p++;这样正确.

char *s[]是定义一个字符串的数组
char *ps=s[2];表示定义一个指向第3个字符串的指针
*s[1]表示第2个字符串的首地址中的第一个字符,就是T
cout<<ps;因为ps是一个地址,cout自动输出ps指向的字符串
*ps与*s[1]差不多,等于*s[2],所以是F

softnow正解