C语言辅助数组,数组(C语言)

本文详细介绍了C语言中数组的定义、初始化以及空间赋值的方法,包括字符空间和非字符空间的拷贝,强调了strcpy和memcpy函数的使用,同时澄清了二维数组与二级指针的区别。
摘要由CSDN通过智能技术生成

一、数组的定义

1、定义

数组:指针的特殊化。

它也是内存分配(空间申请)的一种形式,而不是一种全新的数据结构。

其目的就是为了定义一个连续的空间。

2、2个属性:

大小

读取方式

数据类型 数组名[m]:

[]:把数组名升级为一个连续空间

m:连续空间的个数。

数据类型:表示内存以何方式切割。

int a[100]; // 100个int这么大的连续空间

a[10] // 使用方式与指针是一样的

(1)m 就是一个建议符,只是在申请的时候用一下。后面使用的时候,编译器无法知道[]里面的数是否越界。

int a[100]; // 理论上,a的空间只有100个,但是只是建议;还是可以越界的。

(2)经典错误1:数组名是一个常量符号,只是一个标签常量,是无法改变的,一定不要放到=的左边

char buf[100];

buf = "hello world"; // 错误!

buf++; // 错误!

数组名是一个常量,指针是一个变量。

二、数组空间的初始化(数组空间的赋值问题)

原理:按照标签逐一赋值。(空间的赋值没有投机取巧的办法,只能这样做)

int a[10];

a[0] = x;

a[1] = y;

...

问题:

但如果这样赋值,程序员的工作量很大。

偷懒办法:让编译器进行一些自动处理,帮助程序员写如上的逐一赋值的程序。

方法:空间在定义时,就告知编译器初始化情况,这叫空间的第一次赋值。

int a[10] = 空间;

C语言本身/CPU内部本身,一般不支持空间和空间的拷贝,只支持int、int(4B)等之间小的拷贝。

int a[10] = {10, 20, 30}; -- > 学习arm汇编后,可以进行反汇编。

其内部相当于执行一个拷贝的过程。只是不同编译器调用不同的函数来做拷贝。

这句定义,其实CPU还是做了:

a[0] = 10;

a[1] = 20;

a[2] = 30;

a[3] = 0 / 随机值; (不同编译器可能有所不同)

...

所以,一定不要这样认为:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值