一道字符串指针选择题..哪位大神来帮小弟解答一下

ddyyuan 2015-11-30 09:35:08
下面判断正确的是()
A. char *s="girl"; 等价于 char *s; *s="girl";
B. char s[10]={"girl"}; 等价于 char s[10]; s[10]={"girl"};
C. char *s="girl"; 等价于 char *s; s="girl";
D. char s[4]= "boy", t[4]= "boy"; 等价于 char s[4]=t[4]= "boy"
...全文
357 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ddyyuan 2015-12-01
  • 打赏
  • 举报
回复
不知为什么开不了帖子..老是说文章内容不能含有特殊字符..无奈只能放在这里了。!!
ddyyuan 2015-12-01
  • 打赏
  • 举报
回复
如下题,答案我都知道,希望有详细易懂的解释 1.以下正确的程序段是()。 A. char s; B. char *s; scanf("%s", &s); scanf("%s", s); C. char s; D. char s, *t=s; scanf("%s", &s); scanf("%s", t); 2.下面程序段的运行结果是()。 #include "stdio.h" main() { int m=10, n=20; char *format="%s, m=%d, n=%d\n"; m*=n; printf(format, "m*=n", m,n); } A. format, "m*=n", m, n B. format, "m*=n" C. m*=n, m=200, n=20 D. 以上结果都不对 3.下面程序的功能是将八进制正整数字符串转换为十进制整数。请选择填空。 #include "stdio.h" #include "string.h" main() { char *t, s; int n; t=s; gets(t); n=【1】; while (【2】!= '\0') n=n*8+*t-'0'; printf("%d\n", n); } 【1】A. 0 B. *t C. *t-'0' D. *t+'0' 【2】A. *t B. *t++ C. *(++t) D. t 4.以下正确的程序段是()。 A. char s="12345", t="6543d21"; strcpy( s,t); B. char s, *t="12345"; strcat(s,t); C. char s=" ", *t="12345"; strcat(s, t); D. char *s="12345", *t="54321"; strcat (s,t); 5.不合法的main函数命令行参数表示形式是:()。 A. main( int a, char *c) B. main(int argc, char *argv) C. main( int arc, char **arv) D. main( int argv, char*argc) 6.下面程序的功能是统计字串sub在母串s中出现的次数。请选择填空。 #include "stdio.h" #include "string.h" main()b { char s, sub;//字符串函数 int n; gets(s); gets(sub); printf("%d\n", count(s,sub)); } int count( char *p, char *q) { int m, n, k, num=0; for (m=0; p; m++) for (【1】, k=0; q==p; k++, n++) //b c if(q=='\0') { num++; break;} return (num); } 【1】A. n=m+1 B. n=m C. n=0 D. n=1 【2】A. k B. k++ C. k+1 D. ++k #include "stdio.h" #include "string.h" main(int argc, char *argv) { int m, length=0; for (m=1;m<argc; m++) length+=strlen(argv); printf("%d\n", length); } 7. 程序编译连接后生成的可执行文件是file.out,若执行时输入带参数的命令行是: ./file.out 1234 567 89↙ 则运行结果是() A. 22 B. 17 C. 12 D. 9 8.假定下列程序的可执行文件名为file.out,则在该程序所在的子目录下输入命令行: ./file.out girl boy↙ 后,程序的输出结果是()。 #include "stdio.h" main(int argc, char *argv) { int m; if (argc<=0) return; for (m=1; m<argc ; m++) printf("%c", *argv); } A. girl boy B. gb C. gir D. girlboy 9.设有一个名为file的C源程序,且已知命令行为:file girl boy student, 则可得到以下运行结果的C源程序为() girl boy student A. main( int argc, char *argv) { while (--argc>1) printf("%s%c", *argv, (argc>1)? '\n':' '); } B. main( int a, char * b) { while (a-->1) printf("%s\n", *++b); } C. main( int argc, char *argv) { while (++argc>0) printf("%s%c", *++argv, (argc>1) ? ' ' :'\n'); } D. main(int argc, char *argv) { while (argc>1) printf("%s", *++argv); }
diligent_snail 2015-12-01
  • 打赏
  • 举报
回复
引用 9楼我是你的主体 的回复:
[quote=引用 4 楼 weixin_30460121 的回复:] char *s=“girl” //将字符串首地址赋值给 指针变量s(指针即地址) char *s; s=“girl” //同上
char *s; s="girl";这个不是s是指针变量只能存储地址吗..怎么能存储girl这个字符串[/quote]s="girl"并不是说将字符串常量“girl”赋值给s,而是将字符串常量的首地址赋值给s,s=“girl”=>s=&'g'
weilin.jiang 2015-11-30
  • 打赏
  • 举报
回复
引用 8 楼 ddyyuan 的回复:
[quote=引用 3 楼 Jammg 的回复:] char *s="string"; 被编译时,这个字符串常量是储存在字符串常量区的,他在整个程序的声明周期有效,编译时编译器会将字符串常量所在的地址返回给s,也就是说s指向字符串常量区的某个地方。 这是C语言中一个语法标准,记住就好了
后面的 char *s; s="girl";这个不是s是指针变量只能存储地址吗..怎么能存储girl这个字符串 [/quote] 这个字符串是存储在字符串常量区的,它的首地址才是储存在s,C语言规定这种语法就要这样被编译.
qq_24095983 2015-11-30
  • 打赏
  • 举报
回复
s存储的就是“gril”的首地址
ddyyuan 2015-11-30
  • 打赏
  • 举报
回复
引用 4 楼 weixin_30460121 的回复:
char *s=“girl” //将字符串首地址赋值给 指针变量s(指针即地址) char *s; s=“girl” //同上
char *s; s="girl";这个不是s是指针变量只能存储地址吗..怎么能存储girl这个字符串
ddyyuan 2015-11-30
  • 打赏
  • 举报
回复
引用 3 楼 Jammg 的回复:
char *s="string"; 被编译时,这个字符串常量是储存在字符串常量区的,他在整个程序的声明周期有效,编译时编译器会将字符串常量所在的地址返回给s,也就是说s指向字符串常量区的某个地方。 这是C语言中一个语法标准,记住就好了
后面的 char *s; s="girl";这个不是s是指针变量只能存储地址吗..怎么能存储girl这个字符串
diligent_snail 2015-11-30
  • 打赏
  • 举报
回复
B. 字符数组只能在初始化时赋初值.char s[10];s[10]="girl" (错)
diligent_snail 2015-11-30
  • 打赏
  • 举报
回复
A. char *s=“girl”;*s=“girl” (错)//s为字符串首地址,*s为首地址指向的字符,*s,=‘g’
qq20004604 2015-11-30
  • 打赏
  • 举报
回复
引用 3 楼 Jammg 的回复:
char *s="string"; 被编译时,这个字符串常量是储存在字符串常量区的,他在整个程序的声明周期有效,编译时编译器会将字符串常量所在的地址返回给s,也就是说s指向字符串常量区的某个地方。 这是C语言中一个语法标准,记住就好了
非常简单明了的解释,多谢
diligent_snail 2015-11-30
  • 打赏
  • 举报
回复
char *s=“girl” //将字符串首地址赋值给 指针变量s(指针即地址) char *s; s=“girl” //同上
weilin.jiang 2015-11-30
  • 打赏
  • 举报
回复
char *s="string"; 被编译时,这个字符串常量是储存在字符串常量区的,他在整个程序的声明周期有效,编译时编译器会将字符串常量所在的地址返回给s,也就是说s指向字符串常量区的某个地方。 这是C语言中一个语法标准,记住就好了
ddyyuan 2015-11-30
  • 打赏
  • 举报
回复
我也知道C对..然而..清楚详细的解释总是找不到唉
qq20004604 2015-11-30
  • 打赏
  • 举报
回复
A错,左边是地址,右边是字符串,不能进行赋值; B错,左边是类型为char的数组s,字符宽度为10。 右边是将数组初始化为字符串"girl" 。相当于先声明数组,再给数组赋值。左边这部分是对的。但是在等价于后面, s[10]相当于字符串s的第11个元素,一个是没有第11个元素,另外一个是右边是字符串,肯定不对。 C对。编译通过……为啥,不知道。我没学到这个char *s=字符串的 D错。左边是没问题的。右边的问题在于,编译器会认为 t[4] 是数组t的第5个元素。一方面没声明数组t,另一方面就算声明了,也会让编译器以为你要把字符串赋值为数组t 的第五个元素

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧