1. 程式人生 > >struct的三種初始化方法

struct的三種初始化方法

struct是C中重要的ADT。但是在一般講C的書中,往往只介紹了struct的定義、順序初始化及位域。本文將筆者曾經用到的、看到的知識點羅列出來,與大家分享。

  為了方便後面的介紹,先定義一個struct型別:
   struct User
   {
   int id; //id
   char name[100]; //user name
   char *home; //home directory
   int passwd; //password
   };


  1 初始化
  struct資料有3中初始化方法:順序,C風格及C++風格的亂序。

  1)順序
  這種方法很常見,在一般的介紹C的書中都有介紹。順序初始化的特點是: 按照成員定義的順序,從前到後逐個初始化;允許只初始化部分成員;在被初始化的成員之前,不能有未初始化的成員。


  eg:
   struct User oneUser = {10, "Lucy", "/home/Lucy"};
  初始化之後,oneUser各個成員的值為:
   oneUser.id = 10;
   oneUser.name = "Lucy";
   oneUser.home = "/home/Lucy";
   oneUser.passwd = 0;

  2)亂序(C風格)
  順序的缺陷是必須按成員定義的順序逐個初始化,不能間隔。而亂序的方式則很好的解決了這個問題,因為這種方式是按照成員名進行。
  eg:
   struct User oneUser = {
   .name = "Lucy",
   .id = 10,

   .home = "/home/Lucy"
   };

  3)亂序(C++風格)
  C++風格的亂序初始化方式跟C風格的一樣,只是它更常用在C++程式碼裡。
  eg:
   struct User oneUser = {
   name:"Lucy",
   id:10,
   home:"/home/Lucy"
   };

  不論是哪種方式,都允許只初始化部分成員;未被初始化的成員預設為0(指標型別的成員預設為NULL)。兩種亂序初始化方法,即可以用在C程式碼中,也可以用在C++程式碼中。

相關推薦

struct初始方法

struct是C中重要的ADT。但是在一般講C的書中,往往只介紹了struct的定義、順序初始化及位域。本文將筆者曾經用到的、看到的知識點羅列出來,與大家分享。  為了方便後面的介紹,先定義一個struct型別:   struct User   {   int id;

Collection集合的初始方法

(一) java容器可以分為兩大類 1)Collection其中包括List,Set,Queue   2)Map (二) Arrays.asList()方法:接受一個數組或一個逗號分隔的元素列表,並將其轉化為Lists物件 (三) 1:構造器方法,Colle

jQuery 初始方法

jquery 的三種初始化方法 第一種: $(document).ready(function(){ //do somethings }); 第二種

WebApplicationContext的初始方式

實例 aware web.xml span available HA 而且 util onf    ApplicationContext是Spring的核心,Context我們通常解釋為上下文環境,我想用“容器”來表述它更容易理解一些,ApplicationContext則

Java_53_陣列的初始方式_陣列的界限(下標)

陣列初始化 1.靜態初始化 除了用new關鍵字來產生陣列以外,還可以直接定義陣列的同時就為陣列元素分配空間並賦值。 int[] a={1,2,3}; Man[] mans={new Man(1,1),new Man(2,2)} 2.動態初始化 陣列定義與為陣列元素分配空間

053_數組的初始方式

style 枚舉 元素 區間 默認 int 同時 其中 class 一、默認初始化   數組也是引用類型中的其中一種、所以數組也是對象、數組中的元素相當於對象中的成員變量、其初始化規則和對象成員變量一致。     1.int或能自動轉為int類型的(byte、short、i

053_陣列的初始方式

一、預設初始化   陣列也是引用型別中的其中一種、所以陣列也是物件、陣列中的元素相當於物件中的成員變數、其初始化規則和物件成員變數一致。     1.int或能自動轉為int型別的(byte、short、int)、long預設初始值都為:0     2.浮點數型別(單精度float和雙精度double)

陣列的初始方式

1.靜態初始化        除了用new關鍵字來產生陣列以外,還可以直接在定義陣列的同時就為陣列元素分配空間並賦值。                  &n

Spring容器中定義Bean幾初始方法和銷燬方法

Spring 容器中的 Bean 是有生命週期的,Spring 允許 Bean 在初始化完成後以及銷燬前執行特定的操作。下面是常用的三種指定特定操作的方法: 通過實現InitializingBean/DisposableBean 介面來定製初始化之後/銷燬之前

Spring容器中的Bean幾初始方法和銷燬方法的先後順序

Spring 容器中的 Bean 是有生命週期的,spring 允許 Bean 在初始化完成後以及銷燬前執行特定的操作。下面是常用的三種指定特定操作的方法: 通過實現InitializingBean/DisposableBean 介面來定製初始化之後/銷燬之前的操作方法;

java陣列的初始方式

2018年4月3日Java語言中陣列必須先初始化,然後才可以使用。所謂初始化就是為陣列的陣列元素分配記憶體空間,併為每個陣列元素附初始值。注意:陣列完成初始化後,記憶體空間中針對該陣列的各個元素就有個一個預設值:            基本資料型別的整數型別(byte、sho

ArrayList的四初始方法

1.使用Arrays.asList方法 ArrayList<Type> obj = new ArrayList<Type>(Arrays.asList(Object o1, Object o2, Object o3, ....so on)); 舉個

[IOS 開發] UIImage類的物件兩初始方法的區別

1、imageNamed: 1 UIImage *image = [UIImage imageNamed:@"1"]; UIImage的類方法   第一次讀取圖片的時候,先把這個圖片放到快取中,下次再使用這個名字的圖片時,直接從快取中讀取;如果快取中不存在這個名字的影象

Spring管理的bean初始方法方式,以及@PostConstruct不起作用的原因

1:Spring 容器中的 Bean 是有生命週期的,spring 允許 Bean 在初始化完成後以及銷燬前執行特定的操作。下面是常用的三種指定特定操作的方法: 通過實現InitializingBean/DisposableBean 介面來定製初始化之後/銷燬之前的操作

Mat 的幾初始和賦值方法

cto 轉換 -m mat tro sha 數據 return main 這幾天用到了由cv::Point3f和std::vector<float>到cv::Mat數據類型的轉換。本質上就是換一下容器。今晚做個小總結。 由Point3f 到 Mat 有兩種方法,

Python視覺中Matplotlib(4.設定樣式方法、設定座標刻度以及標籤、設定顯示出特殊字元)

1.三種設定方式   (1)向方法傳入關鍵字引數 上一節已經總結過,一直在使用   (2)對例項使用一系列的setter方法           具體的方法直接看程式碼  import matplotli

Spring 學習筆記1--例項Bean方法、註解

首先通過一個簡單的程式學習Spring在程式中的運用。 定義一個介面: package com.spring.interfacebean; public interface PersonBean { void show(); } 這個介面的實現類:

spring在web容器啟動時執行初始方法(四方式)

需求:在tomcat啟動時開啟一個定時任務,或初始化slor索引 想法:容器啟動時執行方法,最容易想到的就是servlet中可以配置load-on-startup,設定一個正整數也就可以隨容器一起啟動。 問題:上面的方法很好,但是由於定時任務需要去操作資料庫,而專案

卷積神經網路():權值初始方法之Xavier與MSRA

基礎知識 首先介紹一下Xavier等初始化方法比直接用高斯分佈進行初始化W的優勢所在: 一般的神經網路在前向傳播時神經元輸出值的方差會不斷增大,而使用Xavier等方法理論上可以保證每層神經元輸入輸出方差一致。 這裡先介紹一個方差相乘的公式,以便理解Xav

比較Spring中例項Bean的方法

1 使用構造器例項化 <!-- 呼叫預設構造器實現 可以使用scope="prototype"指定是否使用單例模式 --> <bean id="personService" cl