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/
C语言数组空间的初始化详解的更多相关文章
- GO语言数组和切片实例详解
本文实例讲述了GO语言数组和切片的用法.分享给大家供大家参考.具体分析如下: 一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. (1)数组的创建. 数组有3种创建方式: ...
- GoLang基础数据类型--->数组(array)详解
GoLang基础数据类型--->数组(array)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Golang数组简介 数组是Go语言编程中最常用的数据结构之一.顾名 ...
- Go语言Slice作为函数参数详解
Go语言Slice作为函数参数详解 前言 首先要明确Go语言中实质只有值传递,引用传递和指针传递是相对于参数类型来说. 个人认为上诉的结论不对,把引用类型看做对指针的封装,一般封装为结构体,结构体是值 ...
- “全栈2019”Java第五十二章:继承与初始化详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解
数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解 对数组有不了解的可以先看看我的另一篇文章,那篇文章对数组有很多详细的解析,而本篇文章则着重讲动态数组,另一篇文章链接 ...
- [转]Java数组初始化详解
一维数组1) int[] a; //声明,没有初始化 2) int[] a=new int[5]; //初始化为默认值,int型为0 3) int[] a={1,2,3,4,5}; ...
- 3分钟实现iOS语言本地化/国际化(图文详解)
前言 语言本地化,又叫做语言国际化. 是指根据用户操作系统的语言设置,自动将应用程序的语言设置为和用户操作系统语言一致的语言. 往往一些应用程序需要提供给多个国家的人群使用,或者一个国家有多种语言,这 ...
- Go语言学习之8 goroutine详解、定时器与单元测试
主要内容: 1.Goroutine2. Chanel3. 单元测试 1. Goroutine Go 协程(Goroutine)(轻量级的线程,开线程没有数量限制). (1)进程和线程 A. 进程是 ...
- 零基础入门C语言超详细的字符串详解
本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, ...
随机推荐
- 算法入门笔记------------Day2
1.开灯问题 有n盏灯,编号为1-n,第一个人把所有灯打开,第二个按下所有编号为2的倍数的开关(这些灯都被关掉),第三个人按下所有编号为3的倍数的开关,依次类推,一共有k个人,问最后有哪些灯开着?输入 ...
- 【Thinking in Java】组合、继承和代理的区别
三者的定义: 组合:在新类中new 另外一个类的对象,以添加该对象的特性. 继承:从基类继承得到子类,获得基类的特性. 代理:在代理类中创建某功能的类,调用类的一些方法以获得该类的部分特性. 使用场合 ...
- linux修改主机名的方法
linux修改主机名的方法 用hostname命令可以临时修改机器名,但机器重新启动之后就会恢复原来的值. #hostname //查看机器名#hostname -i //查看本机器名对应的ip ...
- Freemarker日期格式化处理
基本参数: date: 只显示日期,不显示时间.如${createTime?date} 或${createTime?date('yyyy-MM-dd')} time: 只显示时间,不显示日期如${cr ...
- Creating a ClickOnce application
refer to http://www.youtube.com/watch?v=t4BTLdIMYEY
- [原] XAF 添加日期筛选下拉选择
1.ListView 添加日期筛选下拉选择,选择指定,可指定日期范围 2.Code using DevExpress.Data.Filtering; using DevExpress.ExpressA ...
- [原] XAF How to Edit multiple objects in a ListViewAndDetailView
2014年好久没有更新Blog了,工作调换了,很少用XAF,但还是很关注XAF的发展和学习,对中国的中小企业数据管理软件开发真的太实用了!! 功能比较简单,但很实用,直接上图和代码! ListView ...
- 练习1-12:编写一个程序,以每行一个单词的形式打印其输入(C程序设计语言 第2版)
#include <stdio.h> #define NOT_BLANK 1 #define BLANK 0 main() { int c; int last_ch = NOT_BLANK ...
- 我的c漏洞
传入指针参数 #include<stdio.h> #include<stdlib.h> void READ(int *a) { scanf("%d",a); ...
- velocity整合servlet
目录结构点我下载工程代码俩实体类不用说了看CustomerVelocityServlet类 package com.velocity.servlet;import java.util.ArrayLis ...