一、选择题
对于第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 }
运行结果: