static char s1[]= "abcde" ,s2[5]={'m','n','p','q','\0'}; cha

static char s1[]= "abcde" ,s2[5]={'m','n','p','q',''}; char * ps=s1;
cout
拉巴巴 1年前 已收到1个回答 举报

liaohui 花朵

共回答了26个问题采纳率:80.8% 举报

输出是 ace99
因为数组名也是地址,所以char * ps=s1;是可以的
*ps就是s1[0],*(ps+2)就是s1[2],*(ps+4)就是s1[4],这就可以说清楚为什么前三个是ace了.
那么剩下的99是怎么回事呢?
我们看看表达式*ps+2就是s1[0]+2,也就是‘a’+2,加号两边的操作数一个是char类型,另一个是int类型,这时候系统会自动把char转为int,由于‘a'的ASCII码是97,所以‘a’转为int类型后也就是97,所以表达式‘a’+2的值(别忘了表达式原始的形式是*ps+2)就是99,系统将99按int类弄输出

1年前 追问

3

拉巴巴 举报

char * ps=s1;是将S1[]的地址给*ps?那要是将s1[]中的内容给它应该这么写呢?

举报 liaohui

如果将s1[]中的内容,应该这样写 char *ps = new char[strlen(s1)];//首先为ps分配足够的存储空间 for(int i=0;i
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 17 q. 2.081 s. - webmaster@yulucn.com