放弃"指针常量"这种不严谨的中文描述!深度理解数组名、指针常量
ques1: 数组名完全等价于指针常量吗?
int array[10] = { 10,11,12,13,14,15 };
printf("sizeof(array)= %d \n", sizeof(array)); char* const str_2 = "QQQQQQQQQQQQQQ";
printf("sizeof(str_2)= %ld \n", sizeof(str_2));
// 此实验说明虽然数组名的实现 和 指针常量(例如char* const p)很类似, 但在编译器眼里,仍然是有区别的:
// sizeof(数组名)等于数组大小, 而sizeof(指针常量)等于4字节(32位平台)或8字节(64位平台)
// 知道这个区别就行,下次和别人聊天,不要把数组名完全等价为指针常量。
ques2: C语言的指针常量,是真常量吗?
char** pp = (char**)(&str_2);
char data = 'c';
*pp = &data;
printf("str_2 = %c \n", str_2[0]);
//实测,指针str_2的指向可以被修改,所以在C语言中,中文表达的所谓“指针常量”这个称呼并不准确。
//C语言内的常量只有字面常量和枚举值。 ( PS:注意,要区分 枚举值 和 枚举变量(注意,要区分 枚举值 和 枚举类型定义的变量 ) )
指针常量和常量指针,这俩中文表述其实并不严谨。但是也有方法来理解其意思。
所谓指针常量,侧重点是常量,int* const p,p就是这里所谓的常量。
所谓常量指针,侧重点是个指针,const int* p;
很显然,数组名更贴近 int* const p, 绝对不是const int* p,所以更贴近指针常量。
但是需要补充:
1. 在C语言中,中文表达的所谓“指针常量”这个称呼并不准确,指针常量,并不是常量。
C语言内的常量只有字面常量和枚举值(注意,要区分 枚举值 和 枚举类型定义的变量 )。
2.数组名并不完全等价于指针常量。依据: sizeof(数组名)等于数组大小, 而sizeof(指针常量)等于4字节(32位平台)或8字节(64位平台)
小结:
放弃"指针常量"这种看似精简实则简陋的中文描述吧!
我们应该使用英文来描述:
Pointer to constant:
const int *ptr;
int const *ptr;W Constant pointer to variable:
int *const ptr; constant pointer to constant:
const int *const ptr;
.
放弃"指针常量"这种不严谨的中文描述!深度理解数组名、指针常量的更多相关文章
- c语言 数组名是常量指针
//数组名是常量指针 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include ...
- 【C/C++】一道试题,深入理解数组和指针
在x86平台下分析下面的代码输出结果 int main(void) { ] = {, , , }; ); ); printf(], *ptr2); ; } &a+1 首先明确,a是一个具有4个 ...
- C语言深度剖析-----数组与指针分析
数组的本质: 指针的运算: 小标VS指针: a和&a的区别: 例: 数组参数: 所以下例返回4 指针和数组的对比小结:
- C语言核心之数组和指针详解
指针 相信大家对下面的代码不陌生: int i=2; int *p; p=&i;这是最简单的指针应用,也是最基本的用法.再来熟悉一下什么是指针:首先指针是一个变量,它保存的并不是平常的数据,而 ...
- C/C++数组名与指针的区别详解
1.数组名不是指针我们看下面的示例: #include <iostream> int main() { ]; char *pStr = str; cout << sizeof( ...
- C++ Primer 随笔 Chapter 4 数组和指针
1.数组:数组是由类型名.标识符和维数组成的符合数据类型,类型名规定了存放在数组中的元素类型,维数规定数组中包含元素的个数而标识符就是数组的名称.例如: int arr[10]; 其中 int 是类 ...
- 数组名和指针的深入理解(C++)
指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用.于是乎,很多程序设计者就被搞糊涂了.魔幻数组名请看程序(本文程序在WIN32平台下编译): #includ ...
- C++数组与指针
指向数组元素的指针 一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址.指针变量既然可以指向变量,当然也可以指向数组元素(把某一元素的地址放到一个指针变量中) ...
- c/c++数组名和指针区别深入探索
指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用.于是乎,很多程序设计者就被搞糊涂了.而许多的大学老师,他们在C语言的教学过程中也错误得给学生讲解:&quo ...
随机推荐
- .net core国际化
1.背景 公司业务遍及全球各地,对应业务系统国际化就是顺理成章的事情.最近就接手了一批新老系统的国际化任务,这里把一些探索经验.案例记录下来.本身改造和探索过程包括.NET MVC的,以及.NET C ...
- JavaScript对象原型链的学习
1.构造函数和原型 1.1对象的三种创建方式 字面量方式 var obj = {}; new关键字 var obj = new Object(); 构造函数方式 function Person(nam ...
- 如何成为一位合格的ScrumMaster
嗨,大家好,我是叶子 ScrumMaster的职责简单理解为:确保团队按照scrum的方式运行,团队的教练,帮助团队更好的工作,过程中的执行者,能够在team和po之间平衡.移除项目进度的障碍,保护团 ...
- android 数据绑定(4)实用特性及疑惑:使用控件、格式化@string/xxx、对象传递、双向数据绑定
1.在布局内使用其它控件 1.1 效果 箭头所指3个控件的内容随输入框内容而变化. 1.2 示例代码 <?xml version="1.0" encoding="u ...
- unity 模板测试 详解
https://blog.csdn.net/u011047171/article/details/46928463#t4
- day46:jQuery
目录 1.jQuery初识 2.选择器 3.文本操作 4.class类值操作 5.css样式操作 6.值操作 7.注意点:button按钮提交form表单数据 8.jquery选择器补充 9.模态对话 ...
- Java实现打开google浏览器
说明: 博主的Google浏览器版本:75.0.3770.142,如果运行异常,需要自行查找对应版本的驱动(chromedriver.exe) 需要的jar包: https://pan.baidu.c ...
- jQuery的那些事儿
jQuery概述 j-JavaScript+Query就是查询js的库,把js中的DOM操作做了封装,实现快速查询使用其中的功能. 优化了DOM操作.事件处理.动画设计和Ajax交互 学习jQuery ...
- Java接口讲解
Java中的接口其实就是一套“标准”或者“规范”,比如使用接口实现[电脑对鼠标.键盘使用USB接口的管理],鼠标和键盘他们与接口之间并不存在子类和父类的关系,但是鼠标和键盘又都要通过USB接口插入电脑 ...
- 关于input框仿百度/google自动提示的方法
引入jquery-autocomplete文件 链接:https://pan.baidu.com/s/1hW0XBYH8ZgJgMSY1Ce6Pig 密码:tv5b $(function() { $( ...