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

2023-12-13 23:42:32

一、数组的定义

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

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

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

文章来源:https://blog.csdn.net/qq_52153072/article/details/132733294
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。