一、选择题

 

 

对于第4小题 知识补充一下:

 

 

 对于第5小题:

 1 #include <iostream>
 2 #include<stdio.h>
 3 
 4 
 5 
 6 int main(){
 7 
 8   int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
 9   int *p=*a;//注意不能int *p=a!为什么不行?接下来会解释
10   p+=7;
11   printf("%d\n",*p);
12   printf("%d\n",*(*a+7));
13 
14    return 0;
15 }

运行结果:

 

 假设改成int *p=a;

 1 #include<stdio.h>
 2 
 3 
 4 int main(){
 5 
 6   int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
 7   int *p=a;
 8   p+=7;
 9   printf("%d\n",*p);
10   printf("%d\n",*(*a+7));
11 
12 
13    return 0;
14 }

报错:

 

 这段报错什么意思?说在一个初始化时不能够将一个指向四个整型数据的指针,转换成一个指向一个整型数据的指针!

看到不同了吗??

也就是说a指针是一个指向四个整型数据的指针!与p指针不一样,因为p指针指指向一个整型数据。

这个a指针也俗称为数组指针。

于是乎,又来了一个知识点,数组指针和指针数组有啥区别?

区别大了:数组指针所指的内容是一个数组,而数组的内容是整型元素;指针数组的指针所指的内容也是一个数组,但是数组的内容是指针。

而往往二级指针int **就喜欢和指针数组打配合。

 1 #include<stdio.h>
 2 
 3 int main(){
 4 
 5   char *s[3]={"fakfha","fahfah","fakh"};
 6   char **ss;
 7   ss=s;
 8   printf("%s\n",*(ss+1));
 9    return 0;
10 }

运行结果: