C語言提高 03

2021-08-13 14:24:37 字數 2049 閱讀 6412

int a = ;

int b[30] = ;

int c[120] = ;

memset(c,0,sizeof(c));

2.1 陣列首元素位址和陣列的位址是兩個不同的概念;b是首元素位址,&b才是整個陣列的位址。b+1  步長為4個位元組;&b+1 步長為30*4個位元組;

2.2陣列名是首元素的位址,是乙個常量,不能修改;陣列一定義就分配好記憶體了,不能改變的。

2.3 陣列首元素的位址和陣列的位址值是相等的;

#include#includevoid main()

;//相當於這麼寫:int a[5] = ;

for (int i = 0; i < 5; i++)

system("pause");

}

a為陣列首元素的位址,a+1位陣列的第二個元素的位址;&a為整個陣列的位址,&a+1 的步長 為20個位元組;

指標陣列之前學習過了:指標組成的結合;例如:char* arr[3] = ;

陣列指標:就是乙個指標指向乙個陣列;有三種方法

第一種:定義陣列型別,取陣列型別為指標變數;

void main()

;//相當於這麼寫:int a[5] = ;

arr* b= &a; //這就是乙個陣列指標,也是乙個二級指標,a本來就是乙個一級指標,取位址a賦值給b就成了二級指標了,指向了乙個陣列a;

for (int i = 0; i < 5; i++)

system("pause");

}

第二種:直接定義乙個陣列指標型別

void main()

;//相當於這麼寫:int a[5] = ;

arr b= &a; //這就是乙個陣列指標,也是乙個二級指標,a本來就是乙個一級指標,取位址a賦值給b就成了二級指標了,指向了乙個陣列a;

for (int i = 0; i < 5; i++)

system("pause");

}

第三種就是直接定義了,也是第二種把typedef去掉後,其他部分不用的變。

int(*arr)[5];//定義了乙個陣列指標,5個位元組,32位平台下,64位下是8個位元組;

int a[5]=;

arr a=&a;

int a [3][5];定義乙個二維陣列a,其實a是個二級指標,陣列指標;a+1跳到下一行的首位址,*(a)+1為第一行的第二個元素位址;*(a+1)+1為第二行第二個元素的位址。也就是二級指標指向的是行,一級指標指向的是列。

int (*arr)[5];//定義乙個陣列指標;

arr=a; //不用取位址,都是二級指標。

void init(int a[10])

void main()

;//相當於這麼寫:int a[5] = ;

printf("%d \n", a);

init(a);

system("pause");

}

但是這樣的寫法不好,不高大上;看看下面的寫法吧

//void init(int a[10]) --> void init(int a) --> void init(int *a)

//void init(int a[3][5]) --> void init(int a[5]) --> void init(int (*b)[3])

做函式引數的等價關係:

char a[30]     ==>     char* a

char* a[30]==>char** a

char a[3][5]==>char(*a)[30]

別人寫了乙個指標陣列,給你用,但是沒有給你陣列的長度,當你在迴圈輸出的時候需要對非null判斷,一下三種對陣列的約束控制都是可以的。

char* str

for(int i=0;str[i]!=null,i++)

C語言提高03 變數本質

變數概念 既能讀又能寫的記憶體物件,稱為變數 若一旦初始化後不能修改的物件則稱為常量。變數本質 1 程式通過變數來申請和命名記憶體空間 int a 0 2 通過變數名訪問記憶體空間 一段連續 記憶體空間的別名 是乙個門牌號 3,修改變數有幾種方法?1 直接 2 間接記憶體有位址編號,拿到位址編號也可...

c語言提高

當在大學期間學習了c語言以後發現自己的真的對程式設計只是停留在初級階段,沒有理解程式設計的思維或者懂自己的腦子去思考解決問題的能力。這就是大學缺少思考帶來的結果。當面試幾次發現,自己的能力真的不行的時候,不由得恐懼起來。先寫乙個面試題目吧,面試公司是一家叫做瑞斯康達科技發展 題目很簡單,在選擇題中,...

C語言總結 03

21.printf 的返回值為列印字元的個數。22.標頭檔案寫法 ifndef add h define add h intadd int x,int y endif 23.遞迴 求階乘 intfactorial int n 斐波那契數列 指的是這樣乙個數列 0 1 1 2 3 5 8 13 21 ...