(原創) 如何对array或struct做初始化? (memset()) (C/C++) (C)
当宣告C/C++的built-in type后,必须马上initialize该变量的值,因为C/C++在宣告变量时,仅为该变量配置了一块内存,却没对该变量设定任何初始值,所以该变量目前的值为宣告该变量前所残留的值,虽可直接使用该变量,但并没有任何意义。
尤其在使用array时,当宣告完array及其大小后,第一件事情就是为array中所有element设定初始值,通常我们会用for来设定
2#include <stdio.h>
3
4#define ia_size 5
5
6int main() {
7 int ia[ia_size];
8 for(int i = 0; i != ia_size; ++i) {
9 *ia = 0;
10 }
11
12 for(int i = 0; i != ia_size; ++i) {
13 printf("%d",*ia);
14 }
15
16 return 0;
17}
用for写最少要两行程序,若使用memset(),只要一行就可搞定
2(C) OOMusou 2006 http://oomusou.cnblogs.com
3
4Filename : memset0.cpp
5Compiler : Visual C++ 8.0 / gcc 4.1.0
6Description : The memset() function fills the first n
7 bytes of the memory area pointed to by
8 s with constant byte c.
9Synopsis : #include <string.h>
10 void* memset(void* s, int c, size_t n);
11Release : 11/25/2006
12*/
13#include <string.h>
14#include <stdio.h>
15
16#define ia_size 5
17
18int main() {
19 int ia[ia_size];
20 memset(ia,0,sizeof(ia));
21
22 for(int i = 0; i != ia_size; ++i) {
23 printf("%d",*ia);
24 }
25
26 return 0;
27}
memset()除了可以初始化array外,也可用来初始化struct
2(C) OOMusou 2006 http://oomusou.cnblogs.com
3
4Filename : memset1.cpp
5Compiler : Visual C++ 8.0 / gcc 4.1.0
6Description : The memset() function fills the first n
7 bytes of the memory area pointed to by
8 s with constant byte c.
9Synopsis : #include <string.h>
10 void* memset(void* s, int c, size_t n);
11Release : 11/25/2006
12*/
13
14#include <string.h>
15#include <stdio.h>
16
17struct Foo {
18 int no;
19 double d;
20};
21
22int main() {
23 Foo foo;
24 memset(&foo,0,sizeof(foo));
25
26 printf("%i\n",foo.no);
27 printf("%d\n",foo.d);
28
29 return 0;
30}
Reference
Linux C函式库详解辞典 P.73, 徐千祥, 旗标出版社
(原創) 如何对array或struct做初始化? (memset()) (C/C++) (C)相关推荐
- (原創) array可以使用reference方式傳進function嗎? (C/C++)
任何型態皆可用C++新提出的reference傳進function,array除了使用pointer方式傳進function外,當然也可以使用reference. 當使用pointer傳進functi ...
- (原創) 如何正確的使用迴圈(使用for_each)? (C/C++) (STL) (template)
Abstract之前在(原創) 如何使用for_each() algorithm? (C/C++) (STL) 曾經討論過for_each(),不過當時功力尚淺,只談到了皮毛而已,這次看了effect ...
- (原創) 由一維陣列模擬二維陣列(多維陣列) (C/C++)
C/C++的陣列是有名的難用!!沒有『真正』支援多維陣列,陣列傳到參數時還必須寫死(C++若用template可不用寫死),若是動態的多維陣列就更難寫了,C/C++還必須到一定的功力才寫的出來!!既然 ...
- (原創) 如何使用C++/CLI读/写jpg檔? (.NET) (C++/CLI) (GDI+) (C/C++) (Image Processing)
Abstract因为Computer Vision的作业,之前都是用C# + GDI+写,但这次的作业要做Grayscale Dilation,想用STL的Generic Algorithm写,但C+ ...
- (原創) 如何使用Operator Overloading? (C/C++)
Abstract Operator Overloading讓我們可以自己定義Operator的功能,讓程式可以更精簡,C#也有,不過不是很強調,但C++非常強調Operator Overloading ...
- (原創) 如何為Blog加上簡體中文(繁體中文)翻譯? (Web) (CSS) (JavaScript)
Abstract 雖然簡體中文和繁體中文本一家,不過若能提供同時提供繁體中文和簡體中文的服務,對於讀者將是一大福音. Introduction 目前我在Blog上方多了簡體中文的即時翻譯,如下圖所示 ...
- (原創) 如何一個字元一個字元的印出字串? (C/C++) (C)
Abstract 若只能一個位元一個位元的印出字串,你會怎麼印呢? Introduction 我同學要將字串送到硬體,但硬體所提供的API,一次只能送一個字元,在這裡我們模擬這個情境,一個字元一個字元 ...
- (原創) 如何使用ModelSim-Altera對Nios II仿真? (SOC) (Nios II) (SOPC Builder) (ModelSim) (DE2)...
Abstract 在剛學習Nios II時,每次在Run As Nios II Hardware下方,看到Run As Nios II ModelSim就覺得很好奇,Nios II明明是嵌入式系統,怎 ...
- 别人的紅警心得(原創)
我的紅警心得(原創) 2007-03-25 22:44:55 大 中 小 RA95 ----- 一个熟悉而又陌生的名词. 曾率领上大红警组横扫上海滩的我在时隔多年后终于鼓起勇气做一个了断! ...
最新文章
- 滴滴进入寒冬期,将裁员2000人
- mdpi is ok
- VTK:绘图之PieChartActor
- WebAPI(part2)--获取元素
- 了解计算机PS,2017年计算机等考一级PS辅导:了解Photoshop7.0中十大快捷操作
- IPV4与IPV6的区别(史上最详细)
- Mac 系统安装 ElasticSearch
- 训练作用_感觉统合是什么意思,感觉统合训练有什么作用
- 各种排序方法的时间复杂度、空间复杂度和稳定性统计表
- payload的使 常用xss_Sony某个深度子域上的XSS
- 1.2成员变量+类变量+static关键字
- 你不知道的JS(原型)
- 2021年十佳返利优惠券平台排名如下
- 获取头条小程序分享二维码
- BACKUP SET和BACKUP PIECE
- java 将doc格式的文档转化为pdf格式(实现Word文件预览)
- 微众银行大数据爽约? 回应:这是一种误解
- git 生成ssh密钥
- 配置计算机能不能关机,win7电脑设置关机时间的详细步骤
- 企业WiFi管理需求
热门文章
- 人工智能+大数据 首个自动驾驶平台诞生
- 后台(27)——文件上传
- Ubuntu无法正常输入英文单引号符号 + 误删除package导致系统设置异常(解决方案)...
- HDU 2149-Public Sale(巴什博奕)
- django中,kindeditor存到数据库的html,前台html标签被自动转义的解决办法
- Oracle中的move命令
- ESP8266在线视频网址
- 2019.04.06 电商04 模板嵌套
- 脏矩形(高效绘图 13.3)
- ios uitableview 去掉多余的空行