本节根据两个选择题进行展开辨析
一、例1
本题答案:C
解析:强干扰选项是B,我相信大多数同学都会在B,C之间犹豫好久,那么为什么答案会最终选择C呢?因为本题在定义函数,所以a首先是一个数组名,其次是一个指针常量,那为什么不是指针变量呢,这要分情况,我们不能简单的认为double a[];这种形式的写法a都是指针变量,如果是在定义函数时,那么函数形参处的double a[]写法,a是指针常量,举个例子:
例子代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
//首先要明确数组名本质是一个地址,这个地址可能是指针常量,也有可能是指针变量
float a[10] = { 0 };//a此时为指针常量
void fun1(float arr1[]);//形参arr1此时为指针变量
void fun2(float* arr2);//形参arr2此时为指针变量
fun1(a); //a 作为指针常量被传递,相当于传入的是数组的首地址
fun2(a); //a 作为指针常量被传递,相当于传入的是数组的首地址
return 0;
}
void fun1(float arr1[])//arr1此时为指针常量
{
}
void fun2(float* arr2)//arr2此时为指针常量
{
}
二、例2(如果例1)能够理解,可以尝试一下该题
本题答案:A
补充说明:函数声明意味着float array[]在赋值的位置,相当于在赋值运算符的右侧
三、总结
如何区分float array[]这种类型写法array是指针变量还是指针常量呢?☆☆☆☆☆
看float array[]出现的位置,如果float array[]出现的位置是被赋值的位置,即相当于赋值运算符左侧,那么array一定是指针常量,相反,如果float array[]出现的位置是赋值的位置,即相当于在赋值运算符的右侧,那么array一定是指针变量!可以用上述两例题进行验证。