美文网首页
C语言数组空间的初始化详解

C语言数组空间的初始化详解

作者: 随波逐流007 | 来源:发表于2016-11-04 18:01 被阅读14次

数组空间的初始化就是为每一个标签地址赋值。按照标签逐一处理。如果我们需要为每一个内存赋值,假如有一个int a[100];我们就需要用下标为100个int类型的空间赋值。这样的工作量是非常大的,我们就想到了让编译器做一些初始化操作,初始化操作是第一次赋值,第二次赋值就不能再这样赋值了。

int a[10]=空间;

我需要给它一个空间,让它对这里面的值进行批量处理;比如int a[10]={10,20,30}; //a[1]=10,a[2]=20,a[3]=30,a[4]=…=a[9]=0所以实际上还是批量内存拷贝的结果,未赋值的结果就是0。初始化与我们逐一赋值的效率是一样的。批量拷贝仅限于第一次赋值。

注意:数组空间的初始化和变量的初始化本质不同,尤其在嵌入式的裸机开发中,空间的初始化往往需要库函数的辅助。

char buf[10]={‘a’,’b’,’c’}; //c的字符串有一个重要的属性,字符串结尾有一个字符’\0’代表字符串的结束。因为我们这里为字符串空间定义了10个字符的大小,但是有时候我们并没有使用完这10个字节,打印的时候10个字节的打印也是错误的,所以为了给字符串一个结束的标志,让其它的函数比如printf函数输出的时候知道它的结尾。

char buf[]=”abc”; //省略数组大小,C会为数组指定大小,这里就是三个字符加上一个结尾标志,数组大小就是4

char buf[10]={“abc”};

char buf[10]=“abc”; //将三个字符批量拷贝到它分配的空间,末尾加’\0’

char *p=“abc”; //先给三个字符分配空间,再将指针指向字符串的首地址,这指向的是一个常量字符串。

buf[2]=’e’; //这是可以的

p[2]= ’e’; //这是不可以的,p指向的是常量区

测试代码如下

我们将这个字符串作为printf函数的参数,它返回的实际上是常量字符串的首地址,而我们这里将它作为一个整型来打印,有一个警告,应该把它作为无符号整型(内存地址是正整型的)来打印。

运行结果如下

可以看到的确打印了一个地址,说明双引号返回的的确是一个地址,正好和我们前面介绍的字符数组获取到它的首地址,然后依次拷贝,但是字符指针就直接得到它的地址存储。这些不同的操作就是数据类型具体的操作了。

原文链接:http://www.maiziedu.com/wiki/c/space/


相关文章

  • C语言数组空间的初始化详解

    数组空间的初始化就是为每一个标签地址赋值。按照标签逐一处理。如果我们需要为每一个内存赋值,假如有一个int a[1...

  • 数组、array和vector - 数组和模板类使用说明

    C++里面创建数组跟C语言是一样的 vector:需要引入文件vector,vector在std命名空间下 初始化...

  • 详解C语言数组

    一维数组 数组名   定义如下 数组名是一个指针常量,也即是第一个数组元素的地址,即b[0],但不能据此推断出指针...

  • C语言数组详解

    数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称...

  • 《C语言》—— 数组详解

    数组的基本概念 我们把一组数据的集合称为 数组(Array) ,它所包含的每一个数据叫做 数组元素 (Elemen...

  • 《C语言》—— 数组详解

    书籍使我变成了一个幸福的人,使我的生活变成轻松而舒适的诗。——高尔基 本文已经收录至我的GitHub,欢迎大家踊跃...

  • C语言9 数组

    C语言9 数组 数组的定义 数组定义的格式: 数组的初始化 方式1:int arr[10] = {0,0,0,0...

  • C语言堆空间详解

    栈空间是存放局部变量的存储器,主要在于栈可以出栈,入栈的操作,可以将我们的临时变量替换。只读空间可以认为是我们程序...

  • C语言数组的升维与降维之说

    C语言数组的升维与降维之说 C语言数组的升维 C语言数组的降维

  • Java 数组常用操作

    数组初始化: 数组初始化后,才能使用。 为数组元素分配空间,并为数组中的每个元素赋值。 初始化分类:静态初始化:指...

网友评论

      本文标题:C语言数组空间的初始化详解

      本文链接:https://www.haomeiwen.com/subject/endwuttx.html