在c語言中,指標和陣列名通常都可以混用。
例如char *p;
訪問時,*p跟p[0]是一樣的,*(p+1)跟p[1]是一樣的。
對於陣列
char b[5];
訪問時,b[0]跟*b是一樣的,b[2]跟*(b+2)是一樣的。
在一般的通訊中(例如串列埠),通常都使用位元組傳輸。而像float,long int之類的,
有4位元組。我的方法就是取它的位址,強制轉換為char型指標,然後當作陣列來用。
float x;
sbuf=((char*)&x)[0];
sbuf=((char*)&x)[1];
sbuf=((char*)&x)[2];
sbuf=((char*)&x)[3];
接收時,剛好倒過來。
更有趣的是,對於陣列形式,陣列名和後面的偏移量可以隨便換。
char buff[10];
//或者用 char *buff=&buffer;
buff[3]=0xaa;
3[buff]=0xaa; //居然是一樣的,昏倒...
因此,我認為編譯器是這麼幹的:對於形如***[yyy]這樣的表示式,會轉化為*(***+yyy),
因此寫成***[yyy]或者寫成yyy[***]都無所謂了...非典用法,請勿亂用,出了事偶不負責...
C語言中指標和陣列
首先,明確乙個概念,指標是什麼,一旦提到這個老生常談且富有爭議性的話題,那真是1000個人有1000種看法。在國內的很多教材中,給出的定義一般就是 指標就是位址 從初步理解指標的角度來說,這種說法是最容易理解的,但是這種說法明顯有它的缺陷所在。指標就是位址 這種說法相當於 指標 字面值位址 或者說乙...
C語言中陣列名和陣列下標
整理自 c陷阱與缺陷 陣列注意點 1.c陣列中只有一維陣列,陣列的大小必須在編譯期作為常數確定。但c陣列的元素可以是任何型別的物件,當然也可以是另乙個陣列,所以 出乙個多維陣列。不太明白為什麼要強調只有一維陣列,難道 模擬 出來的多維陣列和真正的多維陣列不一樣?2.對於乙個陣列,我們只能夠做兩件事 ...
c語言中陣列名和陣列名取位址理解
1 陣列名是個指標型常量,也就是值不能被改變。指標常量和常量指標區別見本文 char str hello char ch 6 hello ch str 錯誤,常量不能被賦值,正如 1 2,字面值常量1被賦值為2一樣錯誤。char ch 2 定義後,陣列名相當於char const ch 0x.ch就...