数组(数组名)与指针辨异
0. 数组作为右值
为什么数组不可以相互赋值和初始化
int a[5] = {4, 3, 2, 1}; int b[5] = a; // 编译错误
数组类型做右值时,会自动转换成指向数组首元素的指针,也即
&a[0];
或a+0
(也就是a
,哈哈,又绕回来了)数组名不可以作为左值;
a = b; // 编译出错
1. 数组与指针的区别
int arr[] = { 1, 2, 3 };printf("arr = %p\n", arr);
printf("&arr = %p\n", &arr);printf("sizeof(arr) = %d\n", sizeof(arr));printf("arr+1 = %p\n", arr + 1);
printf("&arr+1 = %p\n", &arr + 1);
其输出为:
arr = 005DF940
&arr = 005DF940
sizeof(arr) = 12
arr+1 = 005DF944
&arr+1 = 005DF94C// &arr + sizeof(arr), &arr 指向的是数组,+1,跳过的是一个数组的长度
在以下两种场合下,数组名不是用指针常量表示:
- 当数组名作为 sizeof 操作符的操作数;
- sizeof(数组名)返回整个数组的长度,而不是指向数组的指针的长度;
- 当数组名作为单目操作符 &(取地址)的操作数时;
- 取一个数组名的地址返回的是一个指向数组的指针,而不是指向某个指针常量的指针;
数组名和数组名取地址的区别
数组(数组名)与指针辨异相关推荐
- 从一个微型例子看“C/C++的内存分配机制”和“数组变量名与指针变量名”
内存分配方式有三种: 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. 在栈上创建. 在执行函数时,函数内局部变量的存储单元都 ...
- 关于数组名与指针的相互转换
本贴发于CSDN中的C语言讨论区,现转载于此,希望更多的人可以看到,写的不错. 主要是依据以下关于数组名和指针互相转换的道理: (1)当一个数组标识符出现在表达式中,这个标识符的类型就从"某 ...
- C/C++数组名与指针区别深入探索
转之:http://soft.yesky.com/242/2082242.shtml 引言 指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用.于是乎,很多程 ...
- 总结:数组名和指针完全是两码事
大家经常接触到诸如:"数组名可以当作指向数组首元素的指针用"."指针可以用数组下标方式进行访问"这些事实,所以数组和指针的概念经常被混淆,其实数组和指针是完全不 ...
- C/C++数组名与指针区别
C/C++数组名与指针区别 引言 指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用.于是乎,很多程序设计者就被搞糊涂了.而许多的大学老师,他们在C语言的教学 ...
- 神奇的判断数组名和指针的区别
神奇的判断数组名和指针的区别 代码 代码 傻傻的区分不清楚数组名和指针的区别,下面的代码可以证明指针和数组名其实不是一个东西: // An highlighted block #include< ...
- 从编译器角度分析C语言中数组名和指针的区别
从编译器角度分析C语言中数组名和指针的区别 数组名和指针是两个往往很容易让人们混淆的概念,很多人以为数组名就是一个指针,也有很多人知道数组名不同于指针但是仅知道数组名的值不能像指针一样改变. 例如你可 ...
- 数组名和指针的区别和联系、数组名取地址a
前言 在很多用到数组名字的地方,编译器都会自动地将其替换为一个指向该数组首元素的指针. 所以,在大多数表达式中,使用数组名其实是在使用一个指向该数组首元素的指针. 数组名其实是种特殊的指针 int m ...
- C语言中数组名和指针的区别
1: 指针是一个变量,而数组名不是.数组名是数组的首地址,即它本身就是一个地址. 2:假设a是一个数组名,而p是一个指针,当你使用 a 和 &a 时,得到值是一样的,都是数组的起始地址.而使用 ...
最新文章
- 虚拟串口最大传输速率_【干货】详解RS232、RS485、RS422、串口amp;amp;握手
- Linux上的WebSphere MQ开发快速入门
- no.7_qzhai 开心版_传世霸业超变版下载-传世霸业超变版手机版下载v1.0
- rabbitmq java集群_RabbitMQ集群整合SpringBoot2.x
- 在阿里,我们这样帮助用户实现业务云原生化迁云
- [Dubbo实战]dubbo + zookeeper + spring 实战 (转)
- 多核cpu应用场景_操作系统基础11-关于多核编程
- Windows下批量删除svn配置文件夹.svn
- OSPF简单多区域及末梢区域配置
- mybatis:延迟加载时不要在get/set方法上面添加final关键字(原创)
- Eclipse中的集成Git插件删除线上远程分支
- JAR包中读取资源文件
- 6.4(反向显示一个整数)
- 成语小秀才小程序源码-小程序前端-小程序吸粉引流源码
- python计算均线斜率_一根20日均线闯天下——量化回测“压箱底指标”,值得读十遍!...
- 计算日期间隔,以XX年XX月XX日格式显示
- 宝妈新手小白,在家用手机做语录短视频,一周赚了2000多
- Ceilometer原理及介绍
- 网络小贷风控有哪些数据接口?
- RNA m6A修饰问题汇总(第二期)
热门文章
- 一种经典的网络游戏服务器架构
- linux yum未找到命令,解决yum命令失效,vim: command not found
- html一行显示四个图片,css一行显示之:实现多个图片一行显示的方法
- matlab图像中提取不连续的点_MATLAB边缘检测GUI设计
- 计算机多媒体技术视差估计,立体视觉中视差估计算法研究
- linux cc脚本,Linux运维知识之Linux简单处理CC攻击shell脚本
- 计算机发展与应用说课,计算机的发展与应用说课稿.doc
- html生成word附带图片_生成词云的几种方式对比
- 图像处理:透镜畸变及校正模型
- u-boot之mkconfig分析