嵌入式C语言(6)——数组

本文介绍了C语言中数组的定义、大小和读取方式,重点讨论了数组空间的初始化,包括初始化语法、C语言内置的初始化方法以及字符拷贝函数如strcpy和strncpy的使用。特别强调了字符串和非字符串空间的区别以及在嵌入式开发中的应用。
摘要由CSDN通过智能技术生成

一、数组的定义

数组是指针变量的特殊形式,是内存分配的一种形式。

数组定义了一个空间,既然是空间就要想到两个问题:

1、大小

2、读取方式

定义方式:数据类型  数组名[m]   m的作用域是在申请的时候,数组名只是一个常量,一个标签。,一定不要放到=的左边。

eg:int a[100];   定义了100个int空间

读取方式:a[n]  n可以是任何数字,与m无关、

二、数组空间的初始化

按照标签逐一处理

int a[10]:    合法操作空间:[0-9]

a[0] = xx;

a[1] = yy;

程序员这样赋值,工作量比较大,能不能让编译器进行一些自动处理,帮助程序员写如上的程序。

——》空间定义时,就告知编译器的初始化情况,空间的第一次赋值,初始化操作。

可不可以直接int a[10] = 空间呢?

C语言本身,CPU内部本身一般不支持空间和空间的拷贝

int a[10] ={10,20,30};=====>a[0] = 10;a[1] =20;a[2] =30;a[0]=0;

这两条代码的效率是一样的,不过是为了程序员少打几个字。

{}代表空间的限制块。

数组空间的初始化,和变量的初始化本质是不同的,尤其在嵌入式裸板开发中,空间的初始化一般要借助一些库函数或者手动编写的程序。

char

char buf[10] = {'a','b','c'};(''定义的内存空间大小是8bit和char对应)

buf当成普通内存来看,没有问题

buf看成一个字符串来看,最后加上一个‘0’

字符串的重要属性,结尾一定有个‘\0’

char buf[10] = {"abc"};//结尾的0隐藏

char buf[10] = "abc"; 编译器将常量abc逐一拷贝到buf中,生成变量abc,buf可变

char *p = “abc”; p指向了字符串abc的地址,p不可变

char buf[] = “abc”;//4位

buf = “hello world”;//修改标签名是错误的

想要第二次内存初始化,赋值怎么办?

只能逐一处理

buf[0] = ‘h’.......buf[n+1] = 0;

这样处理显然太麻烦了,所以我们引入两个函数 strcpy,strncpy

一块空间,当成字符空间,提供一套字符拷贝函数

字符拷贝函数的原则:

内存空间和内存空间的逐一赋值的功能的一个封装体

一旦空间中出现0这个特殊值,函数就即将结束。

strcpy()是C语言中的一个字符串操作函数,用于复制字符串。 prototpye:

char *strcpy(char *dest, const char *src);

strcpy()的作用是将字符串src所指向的字符串复制到dest所指向的空间。该函数的主要特征包括:- 需要目标空间dest足够大,能容纳源字符串。
- src和dest所指向的内存区域不可以重叠。
- 复制时从src开头开始,遇到'\0'结束。
- 返回指向dest的指针。示例:

char src[]= "hello";
char dest[10];

strcpy(dest, src); // dest现在包含"hello"

strcpy()是一个非常基本的字符串操作函数,用法简单但需要注意内存问题。更安全的字符串复制可以使用strncpy(),指定最大复制字符数。

非字符串空间

数据采集 0x00 0xff 8bit

开辟一个储存这些数据盒子

char buf[10];--->string

unsigned char buf [10];---->data

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值