1. 程式人生 > >c語言 陣列名&&結構體名 為什麼不能用陣列名給陣列賦值,結構體卻可以

c語言 陣列名&&結構體名 為什麼不能用陣列名給陣列賦值,結構體卻可以

/*
name:陣列&&結構體的一些小插曲(陣列名,結構體名,整體賦值...) 
*/ 


#include <stdio.h>


int main()
{


char c1[3]={'a','b','c'};
/*c1[3]={'a','b'};這樣不行 why ?so easy! c1[3] 是陣列c1的第2個元素。*/ 
char c2[3];
 
printf("c2=%d\n",c2);/*10485296*/
printf("c1=%d\n",c1);/*10485312*/
/*c2=c1;  不能這樣給陣列賦值  why?  
 printf("c2=%d\n",c2); 結果:10485296
 printf("c1=%d\n",c1);  結果:10485312
 c1與c2都是常量(具體為 :指標常量),自然就無法相互賦值===
   ==>這也說明了 語句:char c2[3];已經分配出了固定空間來儲存c2陣列 
   
*/
 
 struct A{
 int x;
 
 }a1,a2;
 a1.x=1;
 a2.x=2;
 
 printf("a1=%d   a2=%d\n",a1,a2); 
 printf("a1.x=%d   a2.x=%d\n",a1.x,a2.x);
 
 a2=a1;
 /*沒毛病 why?
 ***前方高能*** 
 struct A{
 int x;
 }a1,a2;
 <===> 
 struct A a1,a2;與常規定義變數語句類比下:
    struct A   a1,a2;
VS     int     x,y; 
!!!想必帥哥美美們已經get到精華了:
沒錯,就是把struct A 看成我們自定義的一種c語言資料型別,這也與typedef呼應 ,
那麼 a1=a2 還有問題嗎? 
 */ 
 
 printf("a1=%d   a2=%d\n",a1,a2); 
 printf("a1.x=%d   a2.x=%d\n",a1.x,a2.x);
 /*
 more:
1.數  組    char      c1[3] ;


2.結構體    struct A  a1;
3.常  規    int       x;
------------------------------------------------------------------------------------------------------------------- 
2,3看成一類;
1特殊  c1就是陣列c1[0]的地址值 ,a1,x的地址為&a1,&x;
 
 */ 
  
return 0;