1.char str[] = "hello"; //legal
2.char str1[];
str1 = "hello"; // illegal
我ç†è§£â€œhelloâ€ä»Žå—符串文å—æ± ä¸è¿”回å—符串文å—的地å€ï¼Œè¯¥åœ°å€ä¸èƒ½ç›´æŽ¥åˆ†é…给数组å˜é‡ã€‚在第一ç§æƒ…况下,将“helloâ€æ–‡å—ä¸çš„å—符é€ä¸ªå¤åˆ¶åˆ°æ•°ç»„ä¸ï¼Œå¹¶åœ¨æœ«å°¾æ·»åŠ “\ 0â€ã€‚
è¿™æ˜¯å› ä¸ºèµ‹å€¼è¿ç®—符“=â€åœ¨è¿™é‡Œè¢«é‡è½½ä»¥æ”¯æŒè¿™ä¸ªå—?
我还想知é“其他有趣的情况,其ä¸åˆå§‹åŒ–与赋值ä¸åŒã€‚
ç”案 0 :(得分:4)
ä¸èƒ½ 将其视为é‡è½½ï¼ˆæ— 论如何都ä¸å˜åœ¨äºŽCä¸ï¼‰ï¼Œå› 为使用å—符串文å—åˆå§‹åŒ–char数组是一ç§ç‰¹æ®Šæƒ…况。å—符串文å—的类型是const char[N]
ï¼Œå› æ¤å¦‚果它类似于é‡è½½ï¼Œæ‚¨å°†èƒ½å¤Ÿä½¿ç”¨ç±»åž‹ä¸ºconst char[N]
的任何表达å¼åˆå§‹åŒ–charæ•°ç»„ã€‚ä½†ä½ ä¸èƒ½ï¼
const char arr[3];
const char arr1[] = arr; //compiler error. Cannot initialize array with another array.
è¯è¨€æ ‡å‡†ç®€å•åœ°è¯´å¯ä»¥ä½¿ç”¨å—符串文å—åˆå§‹åŒ–å—符数组。由于他们对分é…æ²¡æœ‰ä»»ä½•è¯´æ˜Žï¼Œå› æ¤ä¸€èˆ¬è§„åˆ™å°¤å…¶é€‚ç”¨äºŽæ— æ³•å°†æ•°ç»„åˆ†é…给。
对于åˆå§‹åŒ–与赋值ä¸åŒçš„其他情况:在C ++ä¸ï¼Œæœ‰å¼•ç”¨å’Œç±»ï¼Œä¼šæœ‰æ•°ä»¥ä¸‡è®¡çš„例å。在Cä¸ï¼Œæ²¡æœ‰å®Œæ•´çš„类或引用,我能想到的å¦ä¸€ä»¶äº‹å°±æ˜¯constå˜é‡ï¼š
const int a = 4; //OK;
const int b; //Error;
b = 4; //Error;
å¦ä¸€ä¸ªä¾‹å:使用大括å·è¿›è¡Œæ•°ç»„åˆå§‹åŒ–
int a[3] = {1,2,3}; //OK
int b[3];
b = {1,2,3}; //error
与结构相åŒ
ç”案 1 :(得分:3)
如果您想将其视为è¿ç®—符过载(å³ä½¿Cä¸ä½¿ç”¨è¯¥æœ¯è¯ï¼‰ï¼Œæ‚¨å½“然å¯ä»¥è¿™æ ·åšã€‚
ä½ è¿˜è®¤ä¸ºè¿™æ˜¯è¶…è½½ï¼š
unsigned char x;
double y;
x = 2;
y = 1.243;
毕竟那些分é…完全ä¸åŒç±»åž‹çš„æ•°æ®ï¼Œä½†æ˜¯ä½¿ç”¨â€œç›¸åŒçš„è¿ç®—符â€ï¼Œå¯¹å—?
åªæ˜¯ä¸åŒï¼Œè¦åˆå§‹åŒ–或分é…。
å¦ä¸€ä¸ªå¾ˆå¤§çš„åŒºåˆ«æ˜¯ä½ æ›¾ç»èƒ½å¤Ÿåˆå§‹åŒ–结构,但是åŽæ¥çš„赋值没有相应的“struct literalâ€è¯æ³•ã€‚从C99开始ä¸å†æ˜¯è¿™æ ·ï¼Œæˆ‘们现在有compound literals。
ç”案 2 :(得分:1)
char str[] = "hello";
是数组åˆå§‹åŒ–,使用Cä¸å®šä¹‰çš„è¯æ³•ç³–ï¼Œå› ä¸ºå—符串åˆå§‹åŒ–是如æ¤å¸¸è§ã€‚编译器在程åºä¸åˆ†é…一些固定内å˜å¹¶å¯¹å…¶è¿›è¡Œåˆå§‹åŒ–。数组(str)的å称计算为æ¤å†…å˜çš„地å€ï¼Œå¹¶ä¸”æ— æ³•æ›´æ”¹ï¼Œå› ä¸ºæ²¡æœ‰åŒ…å«è¯¥åœ°å€çš„å˜é‡ã€‚
Grijesh Chauhan解释了更多细节。
其他情况å–决于您的æ„æ€ã€‚扩展当å‰æ¡ˆä¾‹ï¼Œæ‚¨å¯ä»¥å¾ˆå®¹æ˜“地看到其他åˆå§‹åŒ–数组具有相åŒçš„属性,例如
int a[] = { 1, 2, 3, 4 };
ç”案 3 :(得分:0)
数组具有ä¸å¯ä¿®æ”¹çš„地å€ã€‚ä½ éœ€è¦ä¸€ä¸ªæŒ‡é’ˆä½œä¸ºå¯ä¿®æ”¹çš„左值。
通过分é…(å°è¯•ï¼‰ä¸€ä¸ªä¸å˜çš„å—符串文å—ï¼Œä½ å°†èŽ·å–它的地å€ã€‚ä¸åŒçš„地å€ä¼šå¯¼è‡´éžæ³•è¡Œä¸ºã€‚
“helloâ€åœ¨å†…å˜ä¸åˆ†é…一些空间并给出和解决。然åŽä½ 拿它的地å€åˆå§‹åŒ–数组。