首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言指針與數組深度解析:指針算術、大小端模式與指針數組

     編輯:關於C語言

1. 數組名與指針

int array[10] = {1023,2,3,4,5,6};
int *p = &array[0];
int *p1 = array;           // array 退化為首元素地址
printf("%p, %p\n", array, &array[0]); // 相同地址
printf("sizeof(array)=%zu, sizeof(p1)=%zu\n", sizeof(array), sizeof(p1)); // 40 vs 8

sizeof(array) 是整個數組大小;sizeof(p1) 是指針大小。array 不可修改(非常量指針),p1 可修改。

2. 指針算術與類型

printf("%d\n", *((char*)p1 + 1)); // 輸出 1023 的第二個字節(小端模式下為 3)

將 int* 強轉為 char* 後 +1 僅移動 1 字節,可逐字節檢查整數在內存中的字節序。

3. 大小端演示

int i = 0x12345678;
char *cpi = (char*)&i;
printf("%x %x %x %x\n", cpi[0], cpi[1], cpi[2], cpi[3]);
// 小端輸出: 78 56 34 12
// 大端輸出: 12 34 56 78

x86/ARM 通常為小端;網絡字節序為大端。htonl/ntohl 用於轉換。

4. 指針賦值掃描數組

int array[10] = {0};
int *p = array;
for (int i=0; i<10; i++) scanf("%d", p++); // 依次寫入
for (int i=0; i<10; i++) printf("%d\n", array[i]);

5. 指針數組 vs 數組指針

char *s[10];        // 指針數組:10 個 char*
char (*s1)[10];     // 數組指針:指向 10 元素 char 數組的指針
char c1[2], c2[3], c3[4];
s[0] = c1; s[1] = c2; s[2] = c3; // OK
char cc[2][10];
s1 = cc;            // OK: cc 退化為指向 [10]char 的指針
s1 = &cc[1];        // OK

記憶口訣:*s[10] 先結合 [10] → 數組;(*s1)[10] 先結合 * → 指針。

總結

  • 數組名在表達式中多退化為首元素指針,但 sizeof、& 時保持數組類型。
  • 指針算術步長由**指向類型大小**決定,強轉類型可改變步長(如逐字節訪問)。
  • 大小端影響多字節數據在內存中的字節順序,跨平台通信需統一字節序。
  • 區分指針數組(存指針的數組)與數組指針(指向數組的指針),語法結合優先級不同。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved