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

  数组空间的初始化就是为每一个标签地址赋值。按照标签逐一处理。如果我们需要为每一个内存赋值,假如有一个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/

时间: 2024-10-11 14:08:34

C语言数组空间的初始化详解的相关文章

C语言的代码内存布局详解

一个程序本质上都是由 BSS 段.data段.text段三个组成的.这样的概念在当前的计算机程序设计中是很重要的一个基本概念,而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配,存储单元占用空间大小的问题. BSS段:在采用段式内存管理的架构中,BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段:在采用段式内存管理的架构中,数据段(da

C语言之内存分配例题详解

1.C中内存分为四个区 栈:用来存放函数的形参和函数内的局部变量.由编译器分配空间,在函数执行完后由编译器自动释放.  堆:用来存放由动态分配函数(如malloc)分配的空间.是由程序员自己手动分配的,并且必须由程序员使用free释放.如果忘记用free释放,会导致所分配的空间一 直占着不放,导致内存泄露.  全局:用来存放全局变量和静态变量.存在于程序的整个运行期间,是由编译器分配和释放的.  例1. 输入一个数组长度,动态创建数组,所有元素随机生成,输出元素中的最大值.     int n;

后缀数组学习笔记【详解|图】

后缀数组学习笔记[详解] 老天,一个后缀数组不知道看了多少天,最后终于还是看懂了啊! 最关键的就是一会儿下标表示排名,一会用数值表示排名绕死人了. 我不知道手跑了多少次才明白过来.其实我也建议初学者手跑几遍,但是一定要注意数组的意义,否则就是无用功. 数组含义: s[ ]:输入的字符串,预处理的时候会在末尾加上一个0 sa[ ]:它的下标就是后缀排名 x[ ] = t[ ]:用来保存第一关键字排名,注意!它的数值是排名.初始时恰好是字符串的ASCII码.字典序嘛! y[ ] = t2[ ]:它的

53 kvm及libvirt、使用virsh管理kvm虚拟机、网络虚拟化技术基础、网络名称空间netns用法详解

01 kvm及libvirt [[email protected] ~]# yum install libvirt libvirt-client python-virtinst virt-manager virt-install -y [[email protected] ~]# yum -y install qemu-kvm [[email protected] ~]# systemctl start libvirtd.service #创建桥 [[email protected] ~]# v

Unix/Linux环境C编程入门教程(41) C语言库函数的文件操作详解

?? 上一篇博客我们讲解了如何使用Linux提供的文件操作函数,本文主要讲解使用C语言提供的文件操作的库函数. 1.函数介绍 fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const char * mode); 函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态. mode有下列几种形态字符串: r 打开只读文件,该文件必须存

springmvc RequestMappingHandlerAdapter初始化详解

我们来看一下RequestMappingHandlerAdapter初始化时做了什么? initControllerAdviceCache()方法是处理注解@ControllerAdvice的,此时我们暂且不关注 这个就比较关键了,注解了很多参数解析器,后文详解#1 返回用于@initbinder方法的参数解析器列表,包括内置的和自定义的解析器.注册步骤和上一步如出一辙不再详述 注册了很多返回值处理器,注册步骤和上一步如出一辙不再详述 书接前文#1 注册了基于注解的参数解析器包括注解@PathV

springmvc RequestMappingHandlerMapping初始化详解

springmvc中配置这个标签默认注册三个bean:RequestMappingHandlerMapping,RequestMappingHandlerAdapter,DefaultHandlerExceptionResolver RequestMappingHandlerMapping 我们看它实现了InitializingBean 接口,所以在getBean()实例化它时会执行afterPropertiesSet()方法,来看该方法干了什么? 方法中实例化了一个BuilderConfigu

3分钟实现iOS语言本地化/国际化(图文详解)

前言 语言本地化,又叫做语言国际化. 是指根据用户操作系统的语言设置,自动将应用程序的语言设置为和用户操作系统语言一致的语言. 往往一些应用程序需要提供给多个国家的人群使用,或者一个国家有多种语言,这就要求应用程序所展示的文字.图片等信息,能够让讲不同语言的用户读懂.看懂. 进而提出为同一个应用程序适配多种语言,也即是国际化. 语言国际化之所以又叫做语言本地化,这是站在每个用户的角度而言的,是指能够让用户本地.本土人群能够看懂的语言信息,顾名思义,语言本地化.其实语言本地化 == 语言国际化!

Java对象初始化详解

出处:http://blog.jobbole.com/23939/ 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.本文试图对Java如何执行对象的初始化做一个详细深 入地介绍(与对象初始化相同,类在被加载之后也是需要初始化的,本文在最后也会对类的初始化进行介绍,相对于对象初始化来说,类的初始化要相对简单一 些). 1.Java对象何时被初始化 Java对象在其被创建时初始化,在Java代码中,有两种行为可以引起对象的创建.其中比较直观的一种,也就是通常所