首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C语言数组的多种赋值方式

C语言数组的多种赋值方式

原创
作者头像
用户8639654
修改2021-07-21 15:11:05
修改2021-07-21 15:11:05
4.2K0
举报
文章被收录于专栏:云计算运维云计算运维

摘要:声明,赋值,连续赋值,memcpy,memset,拼接

前一篇文章已经讲述了动态数组的定义与使用,由于项目大部分运算为矩阵运算,所以用到数组的地方会相对较多,这里再介绍一下数组的一些常用的运算方法。

  • 首先是数组的声明,数组在声明的时候可以连续进行赋值,即一次进行多个数组的元素的赋值,但进行声明后就不可以进行多元素的赋值(不包括memcpy),只能对每个元素进行赋值
代码语言:javascript
复制
int a[3] = {1,2,3};

是可以的,符合语法规范

代码语言:javascript
复制
int a[3];
a[3] = {1,2,3};

则不符合语法规范,这时只能进行元素的单独赋值

代码语言:javascript
复制
int a[3];
a[0] = 1;
a[1] = 2;
a[2] = 3;

或者使用循环进行变量赋值

代码语言:javascript
复制
int a[3];
for(int i = 0; i < 3; i++)
    a[i] = i + 1;

这里的a[3]代表定义数组有3个元素,没有a[3]这个值,最后一个数是a[]

在初始化赋值中,静态数组可以直接使用int a[3] = {0};进行初始化赋值,这里还有另外一种方法就是使用memset函数进行初始化操作,memset的函数原型为

代码语言:javascript
复制
void *memset(void *s, int ch, size_t n);

将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。

(注意:这里是按字节进行替换的,所以int型不能设置成别的数,因为int是4个字节,而设置是一个字节)

memset函数的使用如下:

代码语言:javascript
复制
int a[3];
memset(a,0,sizeof(int)*3);

此种赋值方式与声明时进行赋值的不同可以体现在动态数组中,因为动态数组不能在声明时进行初始化,而memset却可以对动态数组进行初始化,对动态数组的初始化如下:

代码语言:javascript
复制
int *a;
a = (int*)malloc(sizeof(int)*5);
memset(a,0,sizeof(int)*5);
  • 与赋值类似的是数组的拼接,将两个数组进行拼接时,不能像matlab和Verilog中一样使用“[]”来简单的拼接,这里有两种方式,一种是对每个元素进行赋值,另一种是使用memcpy函数

每个元素进行赋值:

代码语言:javascript
复制
int a[3],b[4];
int c[7];
for (int i = 0; i < 7; i++)
{    if (i <3)
        c[i] = a [i];
     else
        c[i] = b [i - 3];
}

使用memcpy函数,memcpy的函数原型为

代码语言:javascript
复制
void *memcpy(void *dest, const void *src, size_t n);

功能为从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中

使用memcpy如下:

代码语言:javascript
复制
int a[3],b[4];
int c[7];
memcpy(c,a,sizeof(int)*3);
memcpy(c+3,b,sizeof(int)*4);

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档