如何用函式初始化結構體,關於結構體初始化

2025-03-10 18:05:12 字數 2969 閱讀 7912

1樓:天蠍神經俠侶

一、若類和結構體所有資料成員均為public型,可賀則數採取如下帶花括號形式進行初始化。

注意: 不論值的個數多少,都必須使用花括號定界。

未指定值的資料成員編譯器會自動初始化為預設值。

這種初始化物件方式,要求所有資料成員必須為public型。

這種初始化物件方式,要求類中不能編寫任何建構函式。

struct s ;

s tests2=;/未指定值的資料成員初始化為預設值,這裡;

s tests[4]=,200,20},300} }未指定值的初始化為預設值,os[2].y,os[3].x,os[3].y。

windows核心程式設計》中我們會遇到:startupinfo si = 就是對si結構體的初始化。

二、若資料成員有private或protected型,或是提供了建構函式,必須使用建構函式來進行初始化。

struct s

s(int idemo,double ddemo)

void show(void)

s os1;//將呼叫預設建構函式(無參建構函式)

s os2(1000,;

s os3=s(2000,;

s os[4]=;未初始化的禪首將呼叫預設建構函式。如此時沒有預設建構函式會出錯。

重要提示:在s os3=s(2000,;語句盯彎中,因是宣告並初始化os3物件,所以將呼叫s(int,double)建構函式對os3進行初始化。

s os3(2000,; 等價於 s os3=s(2000,;

但如果os3已經存在了,s os3(100,;os3=s(2000,,則表示用乙個臨時物件賦值給os3,將呼叫operator=,然後系統再釋放這個臨時產生的物件。系統預設的=運算是將源物件的資料成員的值複製到目標物件中的資料成員中。

2樓:xz巨集定義

假局畢設有乙個如下的struct定義:

struct astruct

int a;

int b;

struct astruct test=;

即使astruct中都是基礎型別的成員這樣的初始化話也是不正確的。

這種初始化僅僅是把a變數設定為了0,而未對b變數做初始化。

產生這樣錯誤的原因,大概是收到陣列初始化的影響。陣列是可以這麼桐悉芹初始化話的,而且初始化的值陸悔只能是0!

對結構體的初始化,可以有一下三種。

struct test

int a;

int b;

int main()

struct test t1=;

struct test t2={

a=2, b=3

struct test t3={

a:12345,b:567890

printf(「 = d, = d」,

printf(「 = d, = d」,

printf(「 = d, = d」,

return 0;

第一種使我們最常見的方式,2,3種方式應該是c99所支援的,但是在微軟的編譯器中不支援c99,所以才會給人以只有gcc支援的錯覺。第一種方式儘量少寫。在生成彙編**時,會消耗掉非常多的時鐘週期。

3樓:陽光遍佈的年代

在struct student裡面加一句student(){花括號裡面填初始化的內容。

關於結構體初始化

4樓:擦擦設定

這個是有原理的。

簡單說一下吧:

1.要從陣列開始說。

比如int a[10]=;其實系統只是把第乙個數賦值為0,其他的數因為沒有引數,系統自動初始化為0,對於int型來說。對於char來說就是『\0x0』。其他的型別類似。

如果是int a[10]=;那麼就是第乙個數是1,其他的數是0。就是1,0,0,0...

2.下面到結構。結構和陣列有點類似;

比如:typedef struct texttext;

如果我寫了text temp=;那麼就可以正常全部初始化成功,引數符合。

如果我寫了text temp1=;那麼就會變成給這個結構固定的引數賦值,這裡是給a賦值,其他的引數類似陣列全部系統自己初始化。

那麼如果寫了text temp2={};就會變成直接全部系統初始化。具體類似於int a[10]={};

測試平臺:devc++

#include

#include

typedef struct texttext;

int main();

int b[10]=;

int c[10]=;

int i;

for(i=0;i<10;i++)

printf("%d",a[i]);

printf("");

for(i=0;i<10;i++)

printf("%d",b[i]);

printf("");

for(i=0;i<10;i++)

printf("%d",c[i]);

printf("");

text temp=;

printf("%d %f %s",text temp1=;

printf("%d %d %s",text temp2={};

printf("%d %d %s",return 0;}

5樓:牟寰藺醉香

你這裡只定義了乙個結構體,但是沒有示例。應改為:

typedef

struct

ledvalue;

struct

ledvalue

ledval=;

6樓:捷冰時蘊涵

data

myvar1=;

如果該域的值是確定的,可以使用常量。

如果希望給域乙個預設值,是行不通的。要設定乙個變數,必須有對應的指令,不能憑空改變。在c++中這個過程可以在建構函式中實現,而c則不行。

C語言結構體陣列的初始化,C語言結構陣列初始化的問題

定義成struct list 試試呢?struct list creat char name,int priority,int time 同學,你注意到了create 函式裡面,你又定義了一句 list pr 了麼?這句話時關鍵,首先,你在main 函式 我猜應該是main吧 中寫道 list pr...

如何初始化類物件陣列,JAVA中怎麼初始化物件陣列?

物件陣列是由預設建構函式 即無參建構函式 初始化的。因此,你的提供參建構函式。stu new student 5 這條語句定義了含有5個student物件的陣列,但沒有初始化,所以你要在類裡面加一個無參的建構函式 student 不知道你是從哪本書看到這麼一說的?建立物件的時候,就會呼叫預設建構函式...

C 中類的建構函式的隱式初始化和顯示初始化怎麼理解

隱式初始化可以理解為自己不做任何的操作,有系統環境幫你完成變數的初始化。顯示的就是自己的操作了啊。隱式初始化,即在main 函式中,沒有顯式呼叫建構函式的語句。建構函式是在定義物件時被系統自動呼叫。如 類名 物件名 實參表 那麼顯式初始化應該是先宣告物件,再呼叫建構函式 即類名 物件名 物件名 建構...