一維陣列的建立和初始化。
陣列的建立:陣列是一組相同型別元素的集合。
陣列的建立方式:
type_t arr_name [const_n]
//type_t 是指數組的元素型別;
//const_n是乙個常量表示式,用來指定陣列的大小。
陣列建立例項:
int arr[10];
char arr [8];
float arr[5];
double arr[15];
建立陣列,[ ]中必須為常量,不能為變數。
陣列的初始化:陣列的初始化是指,在建立陣列的同時給陣列的內容一些合理初始值(初始化)。 看**:
int arr1[10] = ;
int arr2 = ;
int arr3[5] = ;
char arr4[3] = ;
char arr6 = "abcdef";
......
陣列在建立的時候如果想不指定陣列的確定的大小就得初始化。陣列的元素個數根據初 始化的內容來確定。
一維陣列的使用
1. 陣列是使用下標來訪問的,下標是從0開始。
2. 陣列的大小可以通過計算得到。
int arr[10];
int sz = sizeof(arr)/sizeof(arr[0]);
一維陣列在記憶體中的儲存陣列在記憶體中是連續存放的。
指標的初步介紹
1. 記憶體中的內乙個記憶體單元(位元組)對應乙個位址。
2. 在32位的平台上指標的大小是4個位元組。64位平台是8個位元組。 所以我們在c語言中取出某個變數的位址。
int n = 10;
&n;//取出n的位址。
指標可以理解為乙個變數,是乙個專門用來存放位址的乙個變數。 通常我們講的指標其實是乙個指標變數。 那我們來看看指標變數的定義。
int *ptr = null; //定義乙個整 型的指變量,初始化為null .
char *ptr = null; //定義乙個字元的指標變量,初始化為null .
double *ptr = null; //定義乙個雙精度浮點數的指標變量,初始化為null .
當我們拿到指標的時候也要能找到指標所指向的變數,這裡就是我們學過的 * (解引用 操作符)的作用了。
int n = 10;
int *p_n = &n;//將num的位址存放在p_n指標變量中。
*p_n = 20;//改變的其實是n這個變量的內容。
二維陣列的建立和初始化
二維陣列的建立:
//陣列建立
int arr[3][4];
char arr[3][5];
//陣列初始化
int arr[3] [4] = ;
int arr[3] [4] = ,};
int arr[ ] [4] =,};
二維陣列在記憶體中的儲存和一維陣列一樣,二維陣列在記憶體中也是連續儲存的。
有關陣列的運算
// 一維陣列
int a = ; //16
printf("%d\n",sizeof(a)); //4
printf("%d\n",sizeof(a+0)); //4
printf("%d\n",sizeof(*a)); //4
printf("%d\n",sizeof(a+1)); //4
printf("%d\n",sizeof(a[1])); //4
printf("%d\n",sizeof(&a)); //4
printf("%d\n",sizeof(&a+1)); //4
printf("%d\n",sizeof(&a[0])); //4
printf("%d\n",sizeof(&a[0]+1)); //4
//字元陣列
char arr[ ] = ;
printf("%d\n", sizeof(arr)); //7
printf("%d\n", sizeof(arr+0)); //4
printf("%d\n", sizeof(*arr)); //1
printf("%d\n", sizeof(arr[1])); //1
printf("%d\n", sizeof(&arr)); //4
printf("%d\n", sizeof(&arr+1)); //4
printf("%d\n", sizeof(&arr[0]+1)); //4
printf("%d\n", strlen(arr)); //6
printf("%d\n", strlen(arr+0)); //6
printf("%d\n", strlen(*arr)); //err
printf("%d\n", strlen(arr[1])); //err
printf("%d\n", strlen(&arr)); //6
printf("%d\n", strlen(&arr+1)); //隨機值
printf("%d\n", strlen(&arr[0]+1)); //5
char *p = "abcdef";
printf("%d\n", sizeof(p));//4
printf("%d\n", sizeof(p + 1));//4
printf("%d\n", sizeof(*p));//1
printf("%d\n", sizeof(p[0]));//1
printf("%d\n", sizeof(&p));//4
printf("%d\n", sizeof(&p + 1));//4
printf("%d\n", sizeof(&p[0] + 1));//4
總結:
sizeof(陣列名)–陣列名表示整個陣列,求的是整個陣列的大小;
&陣列名–陣列名表示整個陣列,取出來的是陣列的位址;
除此之外,所有的陣列名都表示首元素的位址。
陣列作為函式引數
陣列作為函式引數的時候,不會把整個陣列的傳遞過去。實際上只是把陣列的首元素的 位址傳遞過去了。所以即使在函式引數部分寫成陣列的形式:
int arr 表示的依然是乙個指標: int *arr
轉乙個字尾陣列的簡單總結
然後就是怎麼快速求所有字尾的順序了,其中的關鍵是如何減少兩個字尾比較的複雜度 方法是倍增法,定義乙個字串的k 字首為該字串的前k個字元組成的串,關於在k 字尾上的定義suffix k,i sa k,i 和rank k,i 類似於前,則有 這樣就能在常數時間內比較suffix 2 k,i 之間的大小,...
陣列的總結
一維陣列 函式的宣告 1 一維陣列的建立及初始化 2 一維陣列的使用 3 一維陣列在記憶體中的儲存 4 指標的初步了解 5 一維陣列的指標訪問 int main int arr1 10 建立乙個容量為10的陣列並初始化部分值 int arr2 建立乙個陣列 char arr3 10 abc 該陣列是...
陣列的簡單知識
陣列 要想定義多個重複型別的變數,那麼使用陣列是乙個很好的方法,乙個陣列裡面存放的資料的型別必須是一樣的。即同乙個資料型別。一維陣列 定義格式 資料型別 陣列名 null 陣列名 new 資料型別 長度 可以合併資料型別 陣列名 new 資料型別 長度 或者 資料型別 陣列名 int sore nu...