s1、s2指向的都是数组首地址
选项C中s[3]相当于a[3],*s[3]是不正确的表达式;
选项D中*s相当于a[0],a[0]+3不能表示a[3]
考查:函数的地址调用,将数组名作为数组首地址进行传递,然后取数组元素做加一运算
补充:
- 定义数组时给所有元素赋初值,这叫“完全初始化”
如:int a[5]={1,2,3,4,5};
- 可以只给一部分元素赋值,这叫“不完全初始化”
如:int a[5] = {1, 2};
- 如果定义数组时就给数组中所有元素赋初值,那么就可以不指定数组的长度
如:int a[5]={1,2,3,4,5};
可写成:int a[]={1,2,3,4,5};
{}赋值只能在定义的时候做初始化
主函数中定义了一个指针数组a,可看成,一个以字符指针为元素的一维数组,和一般的数组名一样可以 赋给同类型指针变量,该字符指针数组也可以赋值给指向字符指针的指针,所以数组名a可以用作函数fun的实参,++p使形参p往后移动一个字符指针的位置,即指针a[1]的位置,故,输出为选项A
输出: bBbA
第22题
#include<stdio.h>
void fun(char *c)
{
while(*c)
{
if(*c>='a'&&*c<='z')
*c=*c-('a'-'A');
c++;
}
}
main()
{
char s[81];
gets(s);
fun(s);
puts(s);
}
当执行程序时,从键盘上输入Hello Beijing<回车>
则程序的输出结果是
A.hello beijing
B.Hello Beijing
C.HELLO BEIJING
D.hELLo Beijing
输出结果C ,HELLO BEIJING
fun()函数功能,小写转大写
gets()函数,可以把空格作为字符串一部分输入,以回车作为输入结束标志
函数的参数可以是指针类型,它的作用是将一个变量的地址传送到另一个函数中。函数名代表函数的入口地址,指向函数的指针应定义为void (*pf)(),如果定义为void *pf(),则表示函数pf返回值为一个基类型为void的指针,故,选D
输出:Prohsbn
第一次调用f结束后,5,4,7,6,3,2,1,8,9,10
第二次调用f结束后,3,4,5,6,7,2,1,8,9,10
第四十题
#include<stdio.h>
#include<string.h>
void fun(char *s[],int n)
{
char *t;
int i,j;
for(i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if(strlen(s[i])>strlen(s[j]))
{
t=s[i];
s[i]=s[j];
s[j]=t;
}
}
main()
{
char *ss[]={
"bcc","bbcc","xy","aaaacc","aabcc"};
fun(ss,5);
printf("%s,%s\n",ss[0],ss[4]);
}
程序的运行结果是:A.aaaacc,xy
B.xy,aaaacc
C.bcc,aabcc
D.aabcc,bcc
输出:10,1,8,3,6,5,4,7,2,9
第53题
#include<stdio.h>
char *a="you";
char b[]="Welcome you to China!";
main()
{
int i,j=0;char *p;
for(i=0;b[i]!='\0';i++)
{
if(*a==b[i])
{
p=a;
for(j=i;*p!='\0';j++)
{
if(*p!=b[j]) break;
p++;
}
if(*p=='\0') break;
}
}
printf("%s",&b[i]);
}
则程序输出的结果是:you to China!
输出:7,5,5,3,3,3
传进去的a被重新指向了b,原本数组a的地址内容不变
注意:要求输出s-p,而非60-10
p->a,先执行打印*p,后执行加加操作