摘要:声明,赋值,连续赋值,memcpy,memset,拼接
前一篇文章已经讲述了动态数组的定义与使用,由于项目大部分运算为矩阵运算,所以用到数组的地方会相对较多,这里再介绍一下数组的一些常用的运算方法。
首先是数组的声明,数组在声明的时候可以连续进行赋值,即一次进行多个数组的元素的赋值,但进行声明后就不可以进行多元素的赋值(不包括memcpy),只能对每个元素进行赋值:代码语言:javascript代码运行次数:0运行复制int a[3] = {1,2,3};是可以的,符合语法规范
代码语言:javascript代码运行次数:0运行复制int a[3];
a[3] = {1,2,3};则不符合语法规范,这时只能进行元素的单独赋值
代码语言:javascript代码运行次数:0运行复制int a[3];
a[0] = 1;
a[1] = 2;
a[2] = 3;或者使用循环进行变量赋值
代码语言:javascript代码运行次数:0运行复制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代码运行次数:0运行复制void *memset(void *s, int ch, size_t n);将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
(注意:这里是按字节进行替换的,所以int型不能设置成别的数,因为int是4个字节,而设置是一个字节)
memset函数的使用如下:
代码语言:javascript代码运行次数:0运行复制int a[3];
memset(a,0,sizeof(int)*3);此种赋值方式与声明时进行赋值的不同可以体现在动态数组中,因为动态数组不能在声明时进行初始化,而memset却可以对动态数组进行初始化,对动态数组的初始化如下:
代码语言:javascript代码运行次数:0运行复制int *a;
a = (int*)malloc(sizeof(int)*5);
memset(a,0,sizeof(int)*5);与赋值类似的是数组的拼接,将两个数组进行拼接时,不能像matlab和Verilog中一样使用“[]”来简单的拼接,这里有两种方式,一种是对每个元素进行赋值,另一种是使用memcpy函数每个元素进行赋值:
代码语言:javascript代码运行次数:0运行复制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代码运行次数:0运行复制void *memcpy(void *dest, const void *src, size_t n);功能为从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
使用memcpy如下:
代码语言:javascript代码运行次数:0运行复制int a[3],b[4];
int c[7];
memcpy(c,a,sizeof(int)*3);
memcpy(c+3,b,sizeof(int)*4);