數組之間的賦值能不能直接使用等于號?比如這樣的代碼。
int main() { int a[5] = {1, 2, 3, 4, 5}; int b[5] = {0}; b = a; return 0; }
想把數組 a 里面的數據全部賦值給 b,寫成 b = a 行不行?
和這個問題類似的還有,數組名為什么不能進行 ++ 操作?
chararray[5]={0}; array++;
比如這樣的表達式,array++ 在編譯的時候就會提示錯誤:
root@Turbo:~# gcc test.c -o test test.c: In function ‘main’: test.c:18:11: error: assignment to expression with array type 18 | b = a; | ^ test.c:22:14: error: lvalue required as increment operand 22 | array++; | ^~ root@Turbo:~#
需要一個左值作為操作數,換句話說,數組名不能作為左值。
關于數組名,官方的解釋是:
/* * Except when it is the operand of the sizeof operator, or typeof * operators, or the unary & operator,or is a string literal used * to initialize an array, an expression that has type "array of * type" is converted to an expression with type "pointer to type" * that points to the initial element of the array object and is not * an lvalue. If the array object has register storage class, the be * havior is undefined. * */
除了跟 sizeof、typeof、& 這些運算符一起使用,數組類型通常被轉換成指針類型,指向數組的第一個元素,并且它不能作為左值,不能作為左值,也就是不能被修改。
其實也很好理解,數組被初始化后,已經分配了內存,數組名就表示這塊內存的地址,如果數組名被修改了,整個數組都要跟著移動,顯然不合適。
那 array + 1 這個表達式有沒有問題?
當然沒有問題,array++ 和 array + 1 是兩碼事。
array++ 會修改 array 的值,但是 array + 1 只是個表達式,并不會修改 array 的值,如果寫成 array = array + 1 才會出問題。
for (int i = 0; i < 5; i++) { ????b[i]?=?a[i]; } //或者? memcpy(b,?a,?sizeof(int)?*?5);
最后就是關于數組的賦值,在C語言中沒有捷徑,只能通過循環逐個元素賦值,數組名不能直接賦值。
-
代碼
+關注
關注
30文章
4750瀏覽量
68357 -
數組
+關注
關注
1文章
416瀏覽量
25910
原文標題:數組名之間能否直接賦值
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論