【C/C++】面向过程——数组总结

前言:
本人现阶段只是一个大二学生,写下这些文章的目的旨在于总结自己的知识,适合一些已有粗略基础的人提高自己。
如果有任何地方有误,请谅解并且我希望您能留言告知。谢谢!
当然,欢迎提问,朕知无不言,言无不尽。(滑稽)

数组的定义

数组由目标类型名、变量名、以及[]组成。
例:int nBuf[255];
注:[]中指定该数组可以“存放”多少目标类型元素。[]我们称之为“下标”(运算符),例如[10]代表下标为10;

描述程序猿定义的符号名(上述的“变量名”),C语言中用”变量“,C++中用“对象”。
但个人喜欢在将内置类型定义的符号名称为变量, 将类类型定义的符号名称为对象,但实际上变量和对象描述的都是同一个东西,只不过叫法不同。

数组的存在意义

数组常被用于存放数据。当你觉得需要在以后使用现在得到一堆数据,而现在又不需要时,可以用数组存储该数据集。
当需要使用的时,使用该数组中的数据即可。换句话说,和“缓冲”的概念有些相像。
数组是以前的程序员创造的,虽然如今有很多东西可以替代数组,但是内部或多或少都借用了数组的知识。
可以理解为数组是钢筋水泥,而队列、链表等容器都是高楼大厦。
PS:如果不知道缓冲、容器的定义,可以去了解一下,但不推荐新手深入。因为这是后期的知识。

数组的基础应用

int main()
{
	//假设我们在定义该数组之前得到一串数字,180,100,18. 代表的是一个男人的身高、体重、和长度。
	//那么我们现阶段可以定义一个数组用来存放这些.
	int nBuf[3];
	nBuf[0] = 180;
	nBuf[1] = 100;
	nBuf[2] = 18;
	
	//后面我们会用到这些数据。
	cout<<"The Person's height:"<<nBuf[0]<<endl;
	cout<<"The Person's Weight:"<<nBuf[1]<<endl;
	cout<<"The Person's Length:"<<nBuf[2]<<endl;
	
	return 0;
}
也许有人好奇,为什么下标是从0开始,而不是1。哎╮(╯▽╰)╭,这说明你还是小新人啊。这些数组的基础知识呢,希望您能在其他地方看懂。
毕竟我这文章只是我自己的总结,不是教学。很多基础知识我只会尽可能提及,不会全面覆盖。

<( ̄3 ̄)> 为了不显得突兀,我就在前面讲了不少基础,算是个简单过度。总算是把一些基础讲完了,真累啊。接下来就是我自己的自由发挥时间了。接下来的东西就是我真正的总结了。

——真 · 数组总结——

数组的一般常识

数组名其实可以代表其首地址。
 int nBuf[20] = {0};
 
 //由于C++的cout把一些东西都封装起来了,不好讲。所以我用c的输出函数来讲解,更清楚
 printf("%p\n", nBuf);
 printf("%p\n", &nBuf);

结果:
在这里插入图片描述
可以看到,结果是一样的. 这代表了。数组名就字节代表了其首地址。至于为什么要讲这个,的确,乍一看好像没什么用,但是认真一想,你会发现,的确真的没什么用。W.W。好吧,其实是有用的,主要是为了和指针进行联动。 不过那也是后话了。 只需要知道数组有这个特性就行。

C风格的字符串是以‘\0’结尾的。
char str[] = "Are you gay?";
//那么问题来了,这个str有多少个字节呢?
cout<<sizeof(str)<<endl;

答案是:
在这里插入图片描述
细心的人可以发现,字符串”are you gay?“一共是12个字符,但是却占内存13个字节,那么由我上面所说,多出来的那个字节就是‘\0’了。为解除怀疑,咋们直接看内存。

在这里插入图片描述
(这里面其实还有个道道,就是00后面为什么会有3个字节的CC,哎,朕乏了,不想讲了。只说一句:32位机器cpu吞吐量是4个字节,所以内存的分配是以4个字节来算的。就算只需要一个字节,但是会给你分配4个字节,是为了”内存对齐“,具体可参考char类型变量的内存样式)

数组的占地内存

注:本人使用的是vc6.0,因为vc的环境感觉更容易用于学习。并且是32位机器。
也就是cpu吞吐量是(32/8b = 4B)4字节一次。
注2:至于内存是什么,长啥样,额,这个还真不好讲,大家懂的话就看,不懂,我也没办法。
注3:VC6.0中可以用快捷键alt+6导出内存框。
int main()
{
	char SzBuf[20] = "Hello World!";
	
	return 0;
}
我不会去使用sizeof来讲解内存大小,太没意思,直接进内存看不就得了。

内存中:
内存图
我们可以很清楚地看到,SzBuf的地址是0x0012ff6c。我们进入该内存地址可以看到红色的内存块。这个红色的内存块代表着SzBuf的所占地址空间。一共是4*5,也就是20个字节(毕竟我们在定义数组的时候就写明[20],也就是告诉编译器该数组占内存20个char类型大小的字节。char类型在32位机器是1个字节。)。而hello world!一共占了12个字节。多余的8个字节被编译器置为0;

若我们修改SzBuf的值又会怎样呢。

int main()
{
	char SzBuf[20] = "Hello World!";
	
	strcpy(SzBuf, "Test");
	//strcpy是系统库函数,为了方便就直接用了。
	//你可以把这句话理解为把"Test"字符串复制给SzBuf。主要是为看SzBuf的内存块是怎么变化的。

	return 0;
}

–要不以后写一篇内存的文章吧。哎(╯﹏╰)–

内存中:
在这里插入图片描述

我们可以很清楚地看到,复制test进入SzBuf数组中,只是把前5个字符替换了。而后面的字符并没有管。

啊,我好累啊,我从没想过,原来写这些东西这么累啊,以后写的话还是不考虑新手看的问题。毕竟虽然是个很简单的东西,但是要和新手讲起来,真的要讲好多东西啊!!!,而且我这写的已经是非常的粗略了啊!!! o(≧口≦)o

数组的函数应用

在函数中,我们常见到形参表中出现( char str[] )。这里我得解释一波,str并不是数组,而是指针。它和 char *str没什么区别。至于为什么有人要这么写。咕~~(╯﹏╰)b,那谁知道呢,反正编译器翻译的时候,是直接把str当做指针来使用的。

————累了累了,其他的不讲了,以后闲的无聊再加吧。————

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值