week 12-13

若有定义char* p="computer";则表示p的值是字符串" computer "。

不正确,这里要学习一下指针的用法

指针的本质是一块内存区域,他会指向存储数值的地方

如图所示:

指针p默认指向字符串的首地址单元.

由题意可知,p是被定义为一个字符型指针,那么作为指针它本身是并不会用于直接存储数据,而只是负责记录数据所在的内存地址,以便进行调用。
所以p的值并不是"computer",而是"computer"所在的地址。

15.下面程序段的运行结果是___. char str[]="abc\0def\0ghi",*

下面程序段的运行结果是__ef_.
char str[]="abc\0def\0ghi",*p=str;
printf("%s",p+5);

ef,p+5指向e,连续输出字符直到遇到\0

分析char str[]="abc\0def\0ghi",*p=str;这一句要拆开来看,它与下面的代码行等效:
char str[]="abc\0def\0ghi";
char *p;
p=str;
第一行:char str[]="abc\0def\0ghi"的意思是声明一个名为str的char型数组,并用字符串abc\0def\0ghi初始化(就是由编译器把这个字符串的字符一个接一个地存储到数组str中,并在最后加一个结束符'\0')。
第二行:char *p;就是声明一个指向char型变量的指针p(或叫char *型指针p)。
第三行:p=str;是将字符型数组str的第一个元素(就是a元素)的地址赋给char *型指针p。
这样,就可以通过指针p来操作数组str的内容了,比如printf("%c\n",p[1]);则会在屏幕上显示第二个字符c!

2-2.假设scanf语句执行时输入ABCDE<回车>,能使puts(s)语句正确输出ABCDE字符串的程序段是( C )。

A.char s[5]={“ABCDE”}; puts(s);
B.char s[5]={‘A’, ‘B’, ‘C’, ‘D’, ‘E’}; puts(s);
C.char *s; scanf("%s", s); puts(s);
D.char *s; s=“ABCDE”; puts(s);

解析:要正常输出ABCDE必须在字符串的末尾有’\0’作为结束,这样输出函数才知道什么时候终止。
A选项中字符串数组大小为5只能放ABCDE,放不下’\0’了。如果大小为6,会自动在后面补’\0’
B选项与A一样,放不下’\0’
C选项,楼主要知道,字符串读入进来是要存起来的,而s只是个指针,存不下这么多字符。必须是char s[6];scanf("%s",s);puts(s);
D选项是正确的,"ABCDE"作为静态常量存储于程序段,地址赋给s,可以正常输出。
 

以下语句或语句组中,能正确进行字符串赋值的是___D___.
A.char *sp;*sp="right!"; B.char s[10];s="right!"; C.char s[10];*s="right!"; D.char *sp="right!";
这道题选D?如果是的话说下为什么?

选d;
a中,sp是char型指针,那么*sp就是访问sp所指向的内容了,即已不再是指针.而"right!"这也是个指针,只不过是个字符串常量指针,当然就不能赋给不再是指针的*sp啦.
b中,s是个数组名,而数组名就是个常量指针,即它的值是不能改变的.所以不能用另一个常量指针"right!"来给它重新赋值;
c中,s是个常量指针,其指向数组的第0个元素即s[0],所以*s即为s[0],你觉得可以将"right!"赋给s[0]吗?
d中,sp是个刚定义的指针,然后就马上把"right!"这个常量指针值赋给了sp,所以选d了.

有以下程序: #include <stdio.h> main( ) char s[ ] ="159" , * p; p=s; printf( "% c", * p + + ); printf("%~", * p++);程序运行后的输出结果是( )。 A.15B.16C.12D.59

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值