国二指针练习1

在这里插入图片描述
s1指向的数组首地址s1、s2指向的都是数组首地址
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

选项C中s[3]相当于a[3],*s[3]是不正确的表达式;
选项D中*s相当于a[0],a[0]+3不能表示a[3]

在这里插入图片描述

考查:函数的地址调用,将数组名作为数组首地址进行传递,然后取数组元素做加一运算

在这里插入图片描述
补充:

  1. 定义数组时给所有元素赋初值,这叫“完全初始化”

如:int a[5]={1,2,3,4,5};

  1. 可以只给一部分元素赋值,这叫“不完全初始化”

如:int a[5] = {1, 2};

  1. 如果定义数组时就给数组中所有元素赋初值,那么就可以不指定数组的长度

如: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,后执行加加操作

猜你喜欢

转载自blog.csdn.net/sxh06/article/details/104772230