C语言-指针变量,常量与数组名的细微区别辨析

本节根据两个选择题进行展开辨析

一、例1

本题答案:C

解析:强干扰选项是B,我相信大多数同学都会在B,C之间犹豫好久,那么为什么答案会最终选择C呢?因为本题在定义函数所以a首先是一个数组名,其次是一个指针常量,那为什么不是指针变量呢,这要分情况,我们不能简单的认为double a\[\];这种形式的写法a都是指针变量,如果是在定义函数时,那么函数形参处的double a\[\]写法,a是指针常量 ,举个例子:

例子代码:

cpp 复制代码
#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一定是指针变量!可以用上述两例题进行验证。

相关推荐
彧azz1 小时前
图的存储结构详解:邻接矩阵的原理、实现与应用
开发语言·数据结构·学习·php
嵌入式学习菌1 小时前
Modbus‑RTU 数据类型分析
开发语言·单片机·bug
matlab代码2 小时前
基于matlab数字图像处理的指纹识别系统【源码68期】
开发语言·matlab
matlab代码2 小时前
基于matlab的水果识别系统(苹果香蕉菠萝梨桃子)【源码65期】
开发语言·matlab
wuyk5553 小时前
从零吃透 MQTT 通信|第 8 章 FreeRTOS 多任务架构下 MQTT 工程架构,任务拆分、队列解耦、临界区保护
c语言·开发语言·stm32·学习·架构
weixin199701080163 小时前
[特殊字符]《跨境二手ERP对接Back Market:标准化API + 7~10工作日技术合规审核实录》(附Python源码)
开发语言·python·pandas
尘客-追梦3 小时前
Day 01:插件化之前,先看清 ABI 这堵墙
开发语言·c++·qt
持敬chijing4 小时前
Python-数据类型-列表
开发语言·python·青少年编程
xx~t4 小时前
嵌入式——51单片机1
linux·c语言·单片机·嵌入式硬件·51单片机
写后端的胖头鱼5 小时前
【高频面试题】Java 基础类型 + 包装类 + String 互相转换
java·开发语言