C語言複習3 24

2022-09-03 02:00:10 字數 1236 閱讀 4106

1.一維陣列與指標

int a[10

];int *p = a;

a[i] <=>*(a+i)<=>*(p+i)

a作為一維陣列的陣列名,它的值是固定的。當陣列名用作函式引數時,形參陣列名是作為指標變數來處理的。如果用指標變數作實參,必須先使指標變數有確定值,指向乙個已定義的物件。

2.二維陣列與指標

定義乙個二維陣列int a[3][4];

從二維陣列角度看,a代表二維陣列首元素的位址,現在的首元素不再是乙個簡單的整型元素,而是由4個整型元素所組成的一維陣列,因此,a代表的是首行的首位址,a + 1代表序號為1的行的首位址。如果二維陣列的首行位址是2000,乙個整型資料佔4個位元組,則a + 1的值應該是2000 + 4*4 = 2016。a[0],a[1],a[2]既然是一維陣列名,而c語言又規定了陣列名代表陣列首元素的位址,因此a[0]代表一維陣列a[0]中第0列元素的位址,即&a[0][0]。a[i][j]=*(a[i] + j)=*(*(a + i) + j)。如果a是一維陣列名,則a[i]代表a陣列序號為i的元素的儲存單元。a[i]是有實體地址的,是佔儲存單元的。但如果a是二維陣列,則a[i]是一維陣列名,它只是乙個位址,並不代表某一元素的值(如同一維陣列名只是乙個指標常量一樣)。a + 1和*(a + 1)的值都是2016,但是含義是不同的,a + 1是1行首位址,*(a + 1)等價於a[1],代表的是1行0列元素a[1][0]的位址。

二維陣列名是指向行的,一維陣列名是指向列的。在指向行的指標前面加乙個*,就轉換為指向列的指標。例如,a和a + 1是指向行的指標,在它們前面加乙個*就是*a和*(a+1),它們就成為指向列的指標,分別指向a陣列0行0列元素和1行0列的元素。反之,在指向列的指標前面加&,就成為指向行的指標。例如a[0]是指向0行0列元素的指標,在它前面加乙個&就成為&a[0],由於a[0]與*(a+0)等價,因此&a[0]與&*a等價,也就是與a等價,它指向二維陣列的0行。不要把&a[i]簡單的理解為a[i]元素的實體地址,因為並不存在a[i]這樣乙個實際的資料儲存單元。它只是一種位址的計算方法,能得到第i行的首位址,&a[i]和a[i]的值是一樣的,但它們的含義是不同的。&a[i]或a+i指向行,a[i]或*(a + i)指向列。

int a[3][4] = ,, };

int (*p)[4]; //

定義p為乙個指標變數,指向包含4個整型元素的一維陣列

p =a;

printf("%d

", *(*(p + 1) + 2));

3.

C語言複習(專公升本複習)

示例 inculdevoid mian 上面是乙個簡單的c語言程式下面就來介紹其中的各個關鍵點 c語言程式是由乙個或者多個函式構成,乙個c語言有若干條c語言語句構成 2.注 乙個c語言程式或是乙個資料夾中只能有乙個主函式 inculdevoid mian 1.inculde 標頭檔案 inculde...

c語言複習

記住,typedef是定義了一種型別的新別名,不同於巨集,它不是簡單的字串替換。比如 先定義 typedef char pstr 然後 int mystrcmp const pstr,const pstr const pstr實際上相當於const char 嗎?不是的,它實際上相當於char co...

C語言複習

巨集 替代 的意思 巨集定義 後面沒有標點。替換原則 先替換,後計算 define a x x x int b a 10 10 b 10 10 10 10 120 而非 10 10 10 10 條件編譯 能夠 減少 系統編譯的 量 是一種預處理命令。static int a 10 表示a 靜態變數,...