第二次作业

一、学习内容总结

指向指针的指针,可以这样理解,首先指向指针的指针可以把他看成一种特殊的变量,既然是变量就可以存储不同的元素,比如整形变量int a,a可以存储2,3,4这种普通的整型数据,只要将值付给a就行了,但指向指针的指针所存的元素比较特殊,存放的元素一般是存放地址的指针变量,比如我有三个指针变量,int *p1,*p2,*p3,那么我可以定义一个特殊的变量 int **p,我可以将p1的地址付给p,也可以将p2的地址付给p.比如p=&p1,那么p就代表了他所指向的变量p1或者p2的地址,而p所指向的变量是一个指针变量,*p代表着这个指针变量里面的值,**p代表着它所指向的指针变量的内容(地址)所指向的存储单元的内容

二、在课堂或课后编程学习遇到的问题及解决过程

问题1:空指针异常

问题1的解决方案;计算号调用地址范围 防止指针指向错误地址

问题2:指针的地址赋值会搞错

问题2的解决方案:给指针复制时,如果是赋值整个数组则不用&符号 如果是单个地址则需要&符号

问题3 :出现了错误的括号导致了结果错误

问题2的解决方案:找到正确的括号对应处删除错误的括号

三、作业

1、

#include<stdio.h>
int main(){
  int a,i;
  char s[80],c;
  gets(s);
  c=getchar();
  for(i=0,a=0;s[i]!='';i++){
    if(s[i]==c){
      a++;
    }
  }
  printf("%d",a);
  return 0;
}

2、

#include<stdio.h>
#include<string.h>
int main(){
    char s[5][20],*t;
    int i,j;
    for(i=0;i<5;i++){
        gets(s[i]);
    }
    for(i=0;i<5;i++){
        for(j=i+1;j<5;j++){
        if(strcmp(s[i],s[j])>0){
        strcpy(t,s[i]);
        strcpy(s[i],s[j]);
        strcpy(s[j],t);
        }
    }
    }
    printf("-----------
");
    for(i=0;i<5;i++){
        puts(s[i]);
    }
}

四、附加内容

原文地址:https://www.cnblogs.com/zxwd/p/8687806.html