第五次作业

 

笔记:

 

 

程序运行结果:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 出现问题:

一级指针和二级指针的关系:

1.一级指针指向的内容一定是一个“地址”,而不是普通变量。一级指针本身p本身也是一个变量,它跟 a 是 一样的,只不过指向的内容不同而已,a指向的是一个具体的值,而p则是指向a的内存地址。

 

2.对p的赋值和各种其他操作(不带*),都是伴随着“内存地址”的。

 

3.二级指针也是一个变量,它指向的一定是“指针的地址”。对比下,一级指针指向的是普通变量的地址,二级指针指向的是“一级指针的地址”,以此类推,三级指针对应的是“二级指针的地址”。不管是普通变量,一级指针、二级指针…多级指针,都是普通变量,指针只有在定义的时候,才会带*,有几个*代表就是几级指针,我们在对这个指针进行赋值的时候, 不需要带*,不管是一级还是多级,一律将所有*去掉。

 

 PTA问题(1):

 

指针数组和数组指针的区别:

 

数组指针(行指针)
定义 int (*p)[n];
()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。

如要将二维数组赋给一指针,应这样赋值:
int a[3][4];
int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。
 p=a;        //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
 p++;       //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]

所以数组指针也称指向一维数组的指针,也称行指针。

 

指针数组
定义 int *p[n];
[]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素,这样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。
如要将二维数组赋给一指针数组:
int *p[3];
int a[3][4];
p++; //该语句表示p数组指向下一个数组元素。注:此数组每一个元素都是一个指针
for(i=0;i<3;i++)
p[i]=a[i]
这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2]
所以要分别赋值。

 

这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间

优先级:()>[]>*

PTA问题(2):

 

 

函数题第二题编译错误的原因:

程序执行时,首先计算表达式的值,与case后面的常量表达式值比较,若相等就执行对应部分的语句块,执行完后利用break语句跳出switch分支语句。若表达式的值与所有的case后的常量表达式均不匹配,则执行default项对应的语句n,执行后跳出switch分支语句。case后面的常量表达式只能是整型字符型枚举型常量的一种;各case语句表达式的值各不相同,只起到一个标号作用,用于引导程序找到对应入口。

 PTA函数题(6-4 )字符串的连接的三种方法

第一种方法:

 

 

 

char *str_cat( char *s, char *t ){
  int lens,lent,i;
  lens=strlen(s);
  lent=strlen(t);
  for(i=0;i<lent;i++){
  s[lens+i]=t[i];
  }
  s[lens+i]='\0';
  return s;
}
第二种方法:


char *str_cat( char *s, char *t ){
  char *ps=s;
  while(*s!='\0'){
  s++;
  }
  while(*t!='\0'){
  *s=*t;
  s++;
  t++;
  }
  *s='\0';
  return ps;
}

第三种方法:

 

 

 

char *str_cat( char *s, char *t ){
  int i,j;
  for(i=0;i<=strlen(s);i++){
  if(s[i]=='\0'){
  for(j=0;j<strlen(t);j++,i++){
  s[i]=t[j];
  }
  s[i]='\0';
  }
  }
  return s;
}

posted @ 2020-04-12 22:23  sui-6  阅读(132)  评论(0编辑  收藏  举报