陣列與指標

2021-07-30 03:01:19 字數 4384 閱讀 2135

sizeof(關鍵字):c語言中判斷資料型別或者表示式長度符;不是乙個函式,位元組數的計算在程式編譯時進行,而不是在程式執行的過程中才計算出來。c/c++中的乙個操作符(operator),簡單的說其作用就是返回乙個物件或者型別所佔的記憶體位元組數。

strlen(函式):

所作的僅僅是乙個計數器的工作,它從記憶體的某個位置(可以是字串開頭,中間某個位置,甚至是某個不確定的記憶體區域)開始掃瞄,直到碰到第乙個字串結束符'\0'為止,然後返回計數器值(長度不包含'\0')。屬標頭檔案,只有在c/c++語言中規定\0作為字串結束標誌,不算字串內容。

//32位平台下的型別大小

printf("%d\n",sizeof(long long));     //8

printf("%d\n",sizeof(double));         //8

printf("%d\n",sizeof(int));                //4

printf("%d\n",sizeof(char));             //1

printf("%d\n",sizeof(float));             //4

printf("%d\n",sizeof(long));             //4

printf("%d\n",sizeof(short));            //2

printf("%d\n",sizeof(long double)); //8

陣列名單獨放在sizeof後面表示整個陣列大小

int a = ;

printf("%d\n",sizeof(a));        //16 整個陣列大小  

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));     //16 陣列的位址解引用,表示整個陣列  

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));           //6 整個陣列大小  

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));            //x 從首元素位址開始,向後找'\0'  

printf("%d\n", strlen(arr+0));        //x   隨機值 

//printf("%d\n", strlen(*arr));         //error 把字元a傳入  

//printf("%d\n", strlen(arr[1]));      //error  

printf("%d\n", strlen(&arr));          //隨機值   

printf("%d\n", strlen(&arr+1));      //隨機值 跳到整個陣列後面  

printf("%d\n", strlen(&arr[0]+1));  //隨機值   

char *p = "abcdef";   

printf("%d\n", sizeof(p));          //4 a的位址  

printf("%d\n", sizeof(p+1));      //4 b的位址  

printf("%d\n", sizeof(*p));         //1 解引用為指向乙個字元的大小  

printf("%d\n", sizeof(p[0]));       //1 首元素  

printf("%d\n", sizeof(&p));         //4 p的位址  

printf("%d\n", sizeof(&p+1));     //4 p之後的位址  

printf("%d\n", sizeof(&p[0]+1)); //4 指向b的位址  

printf("%d\n", strlen(p));            //6 從a開始找  

printf("%d\n", strlen(p+1));         //5 從b開始找  

//printf("%d\n", strlen(*p));          //error 把字元a傳入  

//printf("%d\n", strlen(p[0]));       //error  

printf("%d\n", strlen(&p));           //隨機值  

printf("%d\n", strlen(&p+1));       //隨機值  

printf("%d\n", strlen(&p[0]+1));   //5 從b開始找  

char arr = "abcdef";  

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 從a開始找  

printf("%d\n", strlen(arr+0));        //6   

//printf("%d\n", strlen(*arr));         //error 傳入a字元  

//printf("%d\n", strlen(arr[1]));      //error  

printf("%d\n", strlen(&arr));          //6 從a開始找  

printf("%d\n", strlen(&arr+1));    //隨機值 跳過陣列開始找  

printf("%d\n", strlen(&arr[0]+1)); //5 從b開始找 

int a[3][4] = ;    

printf("%d\n",sizeof(a));               //48 整個陣列大小  

printf("%d\n",sizeof(a[0][0]));       //4 首元素  

printf("%d\n",sizeof(a[0]));           //16 第一行元素  

printf("%d\n",sizeof(a[0]+1));       //4 第一行的第二個元素位址  

printf("%d\n",sizeof(a+1));           //4 第二行位址  

printf("%d\n",sizeof(&a[0]+1));     //4 第二行位址  

printf("%d\n",sizeof(*a));             //16 第一行  

printf("%d\n",sizeof(*&a));           //48 整個陣列  

printf("%d\n",sizeof(a[3]));          //16 第四行

指標與陣列,指標陣列 陣列指標

int a 10 print n a p,a p a,a print n a 1 p,a 1 p a 1,a 1 a做乙個指標,步長為4,指向乙個元素,a做乙個指標,步長為40,指向乙個維陣列 int b 3 4 print n b p,b p,b p b,b,b print n b 1 p,b 1...

指標陣列與陣列指標

1.指標陣列 指標陣列中每乙個元素都是乙個指標,也既是存放字串的首位址。所以指標陣列適合處理若干個長度不等的字串。定義的一般形式為 型別說明符 指標陣列名 陣列長度 例如 int p 3 宣告乙個陣列,指標陣列p,由3個int型別指標變數元素組成 從運算子的優先順序分析,由於 的優先順序大於 所以p...

指標陣列與陣列指標

呵呵,實在是厭倦了繞口的解釋。指標陣列,故名思義,就是指標的陣列,陣列的元素是指標 陣列指標,同樣,就是直想陣列的指標。簡單舉例說明 int p 2 首先宣告了乙個陣列,陣列的元素是int型的指標。int p 2 宣告了乙個指標,指向了乙個有兩個int元素的陣列。其實這兩種寫法主要是因為運算子的優先...