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 ...