C/C++小课之数组名是什么
我们今天讨论数组名是什么东西,理解它有助于我们进一步理解和使用指针。
因为它涉及到了内存地址。
问题
数组名是什么?含义是什么?
思路
前提
一个值+1之后的变化可以反映出它的意义/含义。
前提的证明
其实不证自明,计算机中就是这样的。
生活中
一个苹果+1,结果是两个,增加了一个苹果。
一箱苹果+1,结果是两箱,个数是2*每箱苹果数,增加了一箱苹果。
计算机中
int型变量的地址+1,增加了一个int的大小。
double型变量的地址+1,增加了一个double的大小。
思路
根据前提,通过将数组名或数组名相关的值+1来判断它的含义。
验证
编程中要了解一个东西,大多时候我们可以通过输出它来了解它。
代码
#include <iostream>
using namespace std;
int main()
{
//注释指出array代表什么
int array[5] = { 1,2,3,4,5 };
printf(" &array[0] = %p\n", &array[0]); //首元素
printf(" array = %p\n", array); //数组
printf(" array+1 = %p\n", array + 1); //数组
printf(" &array[0]+1 = %p\n", &array[0] + 1); //首元素
printf(" &array = %p\n", &array); //数组
printf(" &array+1 = %p\n", &array + 1); //数组
printf("sizeof(array) = %zd\n", sizeof(array));//数组
}
为什么用printf不是cout?用cout其实也行,printf可能更方便,而且我忘了cout怎么控制位数了。
结果
&array[0] = 0000002A433FF628
array = 0000002A433FF628
array+1 = 0000002A433FF62C
&array[0]+1 = 0000002A433FF62C
&array = 0000002A433FF628
&array+1 = 0000002A433FF63C
sizeof(array) = 20
结论
数组名是什么,有什么含义
数组名是一个常量(所以不能被赋值),是一个地址。(&array中array并不是地址,因为地址是一个值,我们并不能取一个值的地址吧)
在不同情况下,有着不同的含义。
代表整个数组
碰到
&、sizeof时,数组名代表整个数组,作用像是一个变量。代表数组首元素
数组名单独出现或碰到
[]、*时,数组名代表数组第一个元素,是一个地址。(这个下次会讲)
知识点
IDE、编译器、编辑器
编辑器
文本编辑器,比如notepad++,sublime。
编译器
处理我们写的代码。
C/C++的比如有:gcc,mingw。
计算机语言可以分为两种:编译语言和解释语言。
IDE
Integrated Development Environment,集成开发环境。
集合了编辑器和编译器的功能,还有一些辅助开发的功能。
Visual Studio
解决方案
项目
调试
查看源码
比如看
sizeof、iostream,Ctrl+左键查看类图
右击(项目)-查看-查看类图
十六进制
地址+1
核心在于单位。见下篇
sizeof
占用的字节数。基本数据类型、结构体(会字节对齐)。
不同环境下(32位、64位等)某种类型的变量占用字节数可能是不同的
比如指针,32位下是4个字节,64位下是8个字节,
正好是对应计算机的字长。(后边有讲计算机字长是什么)
%zd、size_t
后边还有一篇
%p %x
两者有细微差别。
重视warning
VS的warning还是比较全的,其他IDE的waring不一定全。
如果写代码出了问题却找不到原因,有可能是warning给出的潜在问题没有处理。
写代码时遇到waring一定要处理,不然很容易出问题。
混合编程
C和C++还是不一样的。特别是函数的使用,如果要动态申请一个类对象的内存,可别用malloc,它和new还是不一样的。
一些重要名词
值
生活、编程中出现的数字、字符串、字符等等,都是值。
比如1,2,3,我爱你等等。
变量
变量算是对值的一个替代(或者说抽象)吧,提高复用性。
地址
地址是个值。
计算机有存储空间。我们将其一个个地编号,也就是给了它一个地址。
指针
指针是个变量。
跟普通变量其实没什么本质区别,只不过它被用来存储地址而已。
运算符优先级
* [] &的优先级?
计算机字长
字长:字的长度(位数)。
计算机中有字节这个单位。1个字节等于8位。
多个字节组成字。
我们平常说的电脑32位,64位指的就是字长。
作者:@臭咸鱼
本文为作者原创,转载请注明出处:https://www.cnblogs.com/chouxianyu/
欢迎讨论和交流!
C/C++小课之数组名是什么的更多相关文章
- 【C语言探索之旅】 第二部分第三课:数组
内容简介 1.课程大纲 2.第二部分第三课: 数组 3.第二部分第四课预告:字符串 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语 ...
- C语言 数组名不是指针
今天上计算机系统课的时候老师讲到了C中的聚合类型的数据结构.在解释数组名的时候说"数组名是一个指针,指向该数组的第一个元素",附上ppt(第二行): 我觉得这是不正确的,是一个常见 ...
- C语言 数组名不是首地址指针
今天上计算机系统课的时候老师讲到了C中的聚合类型的数据结构.在解释数组名的时候说"数组名是一个指针,指向该数组的第一个元素",附上ppt(第二行): 我觉得这是不正确的,是一个常见 ...
- 云小课|MRS基础原理之MapReduce介绍
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:MapReduce ...
- C和指针 第六章 数组名与指针
指针的算术运算符是指针和数组之间的一种关联,但不是唯一关联: 可以使用数组名作为指向数组第一个元素的指针,但是不可以给数组名赋新的值. //如下声明a int a[10]; //用a作为指向数组第一个 ...
- 在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。
//在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’:输出这个数组中的所有元素. char [][]y=new char [10][10 ...
- c语言 数组名是常量指针
//数组名是常量指针 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include ...
- C语言的数组名和对数组名取地址
http://blog.csdn.net/zdcsky123/article/details/6517811 相信不少的C语言初学者都知道,数组名相当于指针,指向数组的首地址,而函数名相当于函数指针, ...
- C/C++数组名与指针的区别详解
1.数组名不是指针我们看下面的示例: #include <iostream> int main() { ]; char *pStr = str; cout << sizeof( ...
随机推荐
- phpstudy批量getshell工具
phpstudy批量getshell工具,最新phpstudygetshell,配合精确采集实现每天轻松上万! 详情可加QQ:1743685523
- Mac下使用sshpass让iterm2支持多ssh登录信息保存
mac下没有xshell等连接linux服务器的工具,当需要管理的服务器越来越多之后,密码管理就成了一个很头疼的问题,每次都需要去复制粘贴密码,浪费了很多时间,在网上查了不少资料,发现mac下可以使用 ...
- LESSON 6- Quantization
如果输入本身就是离散的(比如text, computer files…), 对于这种discrete sources不需要量化可以直接进行离散信源编码. 如果输入是waveform(比如声音),取样为 ...
- IDEA连接 Oracle数据库
package com.zxx.util;import org.apache.commons.dbutils.DbUtils;import java.sql.Connection;import jav ...
- gRPC 本地服务搭建
RPC RPC 原理 主流 RPC 框架 gRPC 概述 特点 服务端创建 定义服务 生成 gRPC 代码 服务端实现 客户端实现 踩坑记录 源码 RPC RPC 原理 RPC 框架的目标就是让远程服 ...
- SetIcon(m_hIcon, TRUE);的作用
SetIcon(m_hIcon, FALSE);// Set small icon 这条语句,程序显示时,左上角就会显示定义了的图标,生成的EXE程序也显示了这个图标 SetIcon(m_hIcon, ...
- 【计算机网络】-网络层-Internet的网络层
[计算机网络]-网络层-Internet的网络层 Internet是一组相互连接的网络或者自治系统的集合 Internet 1.存在几个主要骨干网络,骨干网络是由高带宽的线路和快速路由器构成 2.这些 ...
- 2019年十一月(CSP S游记及AFO)
DAY-4 晚自习和班里以及搞OI的两个dalao商量了下决定停课了,当时觉得停得好晚,有的dalao都停一个月了.(现在感觉是明智的选择,我OI辣么菜还不如专注文化课) 晚上回家洗了个澡. DAY- ...
- 并不对劲的CF480E:Parking Lot
题目大意 有一个\(n\times m\)的网格,每个位置是黑色或者白色.\(k\)个操作,每个操作是将一个白格子染黑,操作后输出当前最大的白色正方形的边长.\(n,m,k\leq 2\times 1 ...
- Visual Studio 2012网站如何只生成一个DLL文件
简介: 在Visual Studio 2005,2008,2010版本中,都有Web Deployment工具将网站进行发布,所有代码文件和库文件发布,生成为一个动态链接库文件,而在Visual St ...