2级C语言问题

来源:百度知道 编辑:UC知道 时间:2024/05/27 09:18:40
(1)若有定义int x,y;并已正确给变量赋值,则以下选项中与表达式(x-y)?(x++): (y++)中的条件表达式(x-y)等价的是________。
A)(x-y>0) B)(x-y<0) C)(x-y<║x-y>0) D)(x-y==0)
我编译的结果是C,答案却是D。请高手重点讲下C与D,谢。

(2)以下语句中存在语法错误的是__A______。
A)char ss[6][20];ss[1]= "right? ";
B)char ss[][20]={ "right? "};
C)char *ss[6];ss[1]= "right? ";
D)char *ss[]={"right? "};
解析下答案吧

(3)若有定义:char *x= “abcdefghi”;,以下选项中正确运用了strepy函数的是____D____。
A)char y[10]; strcpy(y,x[4]);
B)char y[10]; strcpy(++y,&x[1]);
C)char y[10],*s; strcpy(s=y+5,x);
D)char y[10],*s; strcpy(s=y+1,x+1);

讲解越详细越好啊,呵呵。谁讲的好给谁分哦~
现在只需详细说下2题的答案A 即可
谢谢!!
谁回答就给谁分哦!!~~

既然楼主只需要第二题的解析,我就详细的说说吧,给不给分都无所谓的,呵呵~
首先我们看A选项:先定义了一个6行20列的二维字符数组char ss[6][20];而ss[1] = "right? "是什么意思,c是不允许对一个二维数组的一维进行赋值的,你看书上有这样对二维数组赋值的吗,应该没有吧!!
再看B:我们说定义一个二维字符数组的时候,第一维是可以省略的,没有第一维就没法知道这个数组到底有几行呀,怎么弄呢?很简单,那就根据后面的赋值内容来判断啊,比方说:a[][5]={{2,3},{5}}什么意思?就是说这个数组有几行啊?两行嘛!所以char ss[][20]={ "right? "}的意思就是这数组有几行?当然就只有一行啦,20列啦!推广下,那么char ss[][20]={ "right? ",“wrong”}又有几行几列呢?答案是两行二十列,选项中char ss[][20]={ "right? "}是什么意思?就是表明这个字符数组有1行20列,并且其初值为“right?”才七位,有20位的空间,怎么会放不下呢,呵呵~

C就更简单了,同样,char *ss[6];是什么意思?不是定义了一个只能包含6个字符的数组,而是定义了一个含有六个元素的指针数组也就是ss[1],ss[1],ss[2],ss[3],ss[4],ss[5],那么这6个元素都是什么呢,没错,每一个都是一个指向一串字符串的字符型指针,那么ss[1]= "right? ";又何错之有呢呀,呵呵~~
至于D答案,跟B的原理一样,定义了一个一维指针数组,到底有几个元素呢,只能通过后面来判断char *ss[]={"right? "}什么意思,就是说这个数组之只有一个严肃,类比下char *ss[]={"right? ",“wrong”,“hello”}又是什么意思呢,没错,就是说这是一个有三个元素的指针数组,其中第一个指针指向“right“,第二个指向”wrong“,第三个指向”hello“也就是*ss[0]="right?",*ss[1]="wrong&quo