[英]What is the difference between time complexity of string and char array declarations in c++?
[英]C string and char array declarations
鑒於這些是允許的:
char c[] = "abc";
char c[] = {'a','b','c','\0'}
char *c = "abc";
那為什么不允許這樣做?
char *c = {'a','b','c','\0'}; // error: a char cannot initialize a char*
如果編譯器將字符串文字解釋為以null終止的char數組,那么我會認為它等同於上面的語句3,不是嗎?
同樣,為什么不允許這樣做:
int arr[3];
int *i = arr; // OK
int *i = {1,2,3} // error: an int cannot initialize an int*
這不是一個大問題,我很好奇。我想這個問題歸結為一個字符串常量(或聲明的整數數組)和一個字符元素數組在分配給指針時的區別是什么?
數組不是指針。 用字符串文字初始化字符數組是一種特殊情況(6.7.8#14):
字符類型的數組可以由字符串文字初始化,並可選地用大括號括起來。 字符串文字的連續字符(如果有空間或數組大小未知,則包括終止空字符)將初始化數組的元素。
並且(6.7.8#16):
否則,具有聚合或聯合類型的對象的初始化程序應為括號內的元素或命名成員的初始化程序列表。
關於指針初始化(6.7.8#11):
標量的初始化程序應為單個表達式,可以選擇用大括號括起來。 對象的初始值是表達式的初始值(轉換后); 采用與簡單賦值相同的類型約束和轉換,將標量的類型作為其聲明類型的非限定版本。
數組不是指針。 只是數組名稱是指向第一個數組項的指針。
您在這里要問的是在C / C ++中初始化數組的不同方法。 請注意:
字符串文字是section DATA
中未命名數據的特例。 使用數組時,您應該手動分配堆上的空間,然后將數據移到那里。 (因為不能分配數組,所以是一對一的。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.