對于數組元素很多的初始化可以使用初始化列表方法。在c語言中用于進行初始化的程序結構則稱為初始化器或初始化列表。
10年積累的成都網站制作、網站建設經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站設計后付款的網站建設流程,更有秀洲免費網站建設讓你可以放心的選擇與我們合作。
1、初始化器
初始化器是聲明器的可選部分,它由一個'='以及其后的一個表達式(或含有多個以','隔開的帶圓括號表達式的單一列表)所組成。后面這一列表有時也被稱為“初始化(器)列表”(initializer list)或”初始化列表”(initialization list)。
例:
public class Curry
{public string MainIngredient { get; set; }
public string Style { get; set; }
public int Spiciness { get; set; }}
2、初始化列表
一個類/結構的構造函數可以在定義中于構造函數體前包含一個初始化列表,用以給類/結構的元素賦初值。
例:
class foo
{public:
foo(string s, int i):name(s), id(i){} ; // 初始化列表
private:
string name ;int id ;};
擴展資料
在程序里,數據初始化也可能在沒有由明確的語法來實現的情況下進行。例如說,如果一個靜態變量在沒有初始化(即未指定初值)的情況下被聲明,則:對于原生數據類型:以對應類型的零值進行初始化;對于類中的靜態對象:由其默認的構造函數來進行初始化。
每一個初始化部分里面的代碼在程序運行后,或庫的begin-end塊運行之前。delphi使用對單元相關樹的深度優先遍歷來運行初始化部分。換句話說,就只在一個單元的初始化代碼運行前,delphi就運行了特他使用的每一個單元的初始化部分。每一個單元僅初始化一次 。
參考資料來源:百度百科——初始化
百度百科——初始化列表
百度百科——初始化器
C語言中,同變量一樣;數組也必須先定義后使用。
一維數組的定義形式:
類型標識符? 數組名[常量表達式];例如int a[10]; ? 其中a為地址常量。
如變量的定義一樣,int a ;double a;float a等;數組的定義只是把后面的變量名改為數組名而已。
int a[10]就是定義了一個數組名為a的數組;此數組有10個元素。其中各元素從a[0]到a[9];并沒有a[10]元素。下面列舉一個。
擴展資料
常量表達式可以包括字面常量和符號常量;但不能包含變量。例如對下面定義是錯誤的
int n=5
int a[n]
可以修改為
#define N 5
int a[N]
其中對二維及多位數組定義可以類推
int? a[x][y][z][...]其中 x,y,z為數字。
參考資料
百度百科-C語言
intmain(void){
structstudentsbao={};
printf("%d,%s\n",bao.id,bao.name);//輸出是4224528,空(應該是null)
//structstudentsbao={3,"123"};可以。第一種賦值方法
//strcpy(bao.name,"bao");//可以,
//printf("%d,%s\n",bao.id,bao.name);
//bao.name="bao";錯誤“stray'\351'inprogram”其他是亂碼,
//bao.name[0]='a';
//bao.name[0]='/0';
//printf("%d,%s\n",bao.id,bao.name);
/*這樣可以,*/
//chararr[10]="baobao";
////bao.name=arr;//error"assignmenttoexpressionwitharraytype"
//scanf("%s",bao.name);//可以,
//printf("%d,%s\n",bao.id,bao.name);
//所以scanf那一類函數都可以。
//還有就是memcpy函數也是可以的
return0;
}
擴展資料
C語言結構體數組的直接賦值及數組的長度計算:
#includestdio.h
//自定義一個字符串的結構體,包含字符串和字符串長度兩個變量
typedefstructStr{
charch[100];
intlength;//char數組(字符串)的長度
}myStr;
//剛開始聲明變量時每個變量的字符串長度length都為0
//這里以長度為10的數組為例,數組長度是1000
//對第0個到第9個結構體數組的長度同時賦值為0
myStrmyStr1[10]={
[0...9]={
.length=0,
}
};
intmain(){
inti;
for(i=0;i10;i++){
printf("%d\n",myStr1[i].length);
}
return0;
}
1.代碼如下:#include
#include
using
namespace
std;
class
foo
{
public:
explicit
foo(
int
id=0
)
:
id_(id)
{
cout
__FUNCTION__
"
"
id_
endl;
}
~foo()
{
cout
__FUNCTION__
"
"
id_
endl;
}
private:
int
id_;
};
int
main()
{
int
a[2]
=
{
0,
1
};
//
第一種方法
{
foo
b[2]
=
{
foo(a[0]),
foo(a[1])
};
}
cout
"-----------------"
endl;
//
第二種方法
{
char
_b_buf_[
sizeof(foo)*2
];
foo
(b)[2]
=
(foo()[2])_b_buf_;
for(
size_t
i=0;
i2;
++i
)
{
new(b[i])
foo(
a[i]
);
}
//
...use
b
for(
size_t
i=0;
i2;
++i
)
{
b[2-1-i].~foo();
}
}
cout
"-----------------"
endl;
//
這估計就是你要的了,和第二種方法一樣
{
foo*
p
=
(foo*)operator
new(
sizeof(foo)*2
);
for(
size_t
i=0;
i2;
++i
)
{
new(p[i])
foo(
(int)i
);
}
//
...use
b
for(
size_t
i=0;
i2;
++i
)
{
p[2-1-i].~foo();
}
operator
delete(
p
);
}
return
0;
}
2.C++
new用法之一
new運算符
最常用的是作為運算符的new,比如:
string
*str
=
new
string(“test
new”);
作為運算符,new和sizeof一樣,是C++內置的,你不能對它做任何的改變,除了使用它。
new會在堆上分配一塊內存,并會自動調用類的構造函數。
C++
new用法之二
new函數
第二種就是new函數,其實new運算符內部分配內存使用的就是new函數,原型是:
void
*operator
new(size_t
size);
new函數返回的是一個void指針,一塊未經初始化的內存。如你所見,這和C語言的malloc行為相似,你可以重載new函數,并且增加額外的參數,但是必須保證第一個參數必須是size_t類型,它指明了分配內存塊的大小,C++允許你這么做,當然一般情況下這是不必要的。如果重載了new函數,在使用new操作符時調用的就是你重載后的new函數了。
函數不可以定義為數組,可以用函數指針來操作。
1.函數指針的數組定義方法:返回值類型( * 指針變量名[Number]) (形參列表)。
例如:
double add(double a,double b){}
double sub(double a,double b){}
double mul(double a,double b){}
double div1(double a,double b){}
double (*oper_func[])(double, double) = {add,sub,mul,div1};//函數指針的數組定義。
2.函數指針是指向函數的指針變量。 因而“函數指針”本身首先應是指針變量,只不過該指針變量指向函數。這正如用指針變量可指向整型變量、字符型、數組一樣,這里是指向函數。
C在編譯時,每一個函數都有一個入口地址,該入口地址就是函數指針所指向的地址。有了指向函數的指針變量后,可用該指針變量調用函數。
擴展資料:
指針函數和函數指針的區別:
這兩個概念都是簡稱,指針函數是指返回值是指針的函數,即本質是一個函數。我們知道函數都有返回類型(如果不返回值,則為無值型),只不過指針函數返回類型是某一類型的指針。其定義格式如下所示:返回類型標識符*函數名稱。
返回類型可以是任何基本類型和復合類型。返回指針的函數的用途十分廣泛。事實上,每一個函數,即使它不帶有返回某種類型的指針,它本身都有一個入口地址,該地址相當于一個指針。比如函數返回一個整型值,實際上也相當于返回一個指針變量的值,不過這時的變量是函數本身而已,而整個函數相當于一個“變量”。
參考資料:百度百科 -?函數指針
當前題目:c語言構造函數數組 C語言函數數組
轉載來于:http://vcdvsql.cn/article14/hhhoge.html
成都網站建設公司_創新互聯,為您提供品牌網站制作、面包屑導航、營銷型網站建設、商城網站、App開發、網站排名
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯