c語言指標和陣列知識總結(上)
一、指標的基礎
1.c語言中,變數的值能夠通過指標來改變,列印指標的語句符號可以是: %08x
2.指標的本質
指標的本質就是變數,那麼既然是變數,那麼一定會分配位址.只不過指標裡面儲存的是位址.
3.傳遞位址和傳遞值的區別
函式傳引數只是乙個賦值/拷貝的作用,所以在函式值傳遞和位址傳遞有如下區別:
值傳遞不能改變函式體外部的變數,位址傳遞可以改變函式體外部的變數.
4.那麼什麼場合需要用到位址傳遞呢?
注意兩點:
第乙個是實現對函式體外部的變數進行修改
第二個是複雜函式資料型別傳遞的時候(極大的提高了c語言的執行效率)
5. #define led(m) m?(n = 1):(n = 0)
6.注意const的用法
int const* p 和 int *const p的區別
二、陣列的基礎
1.陣列是相同型別變數的有序集合.
2.陣列名代表陣列首元素的位址.
3.陣列的位址需要用取址符號才能夠取到.
4.陣列首元素的位址值和陣列的位址值是一樣的.
5.陣列首元素的位址和陣列的位址是兩個不同的概念.
6.陣列和指標乙個非常重要的區別
[cpp]
1_1.c中
char* p = "abcd";
1_2.c中
extern char* p
如果直接列印的話是列印的位址. 請仔細分析.
三、指標和陣列的區別
1.指標形式訪問陣列元素與用陣列下表形式訪問陣列元素兩者執行效率
對比可以發現:指標形式以遞增的方式訪問陣列元素比以下標方式訪問速度更快
2.指標知識檢測的乙個例項(摩托羅拉面試題)
[html]
#include
int main()
; int* p1 = (int*)(a + 1);
int* p2 = (int*)(&a + 1);
int* p3 = (int*)((int)a + 1);
printf("%d \n %d \n %d \n",p1[3],p2[-1],p3[0]);
}
列印結果如下:
[html]
5
5
33554432
具體可自行分析.
3.乙個處理器大小端檢測的程式例項
[html]
#include
int main()
列印結果如下:
[html]
p1 = bf84f814,*p1 = 34 !!
p2 = bf84f815,*p2 = 12 !!
this machine is little edian !!
結果明了.
4.指標運算公式
指標運算可用如下公式來計算:
[html]
p+n = (unsigned int)p + n*sizeof(*p) ;
從這個公式中可以看出.對於陣列a來說,雖然,a和&a是相等的,但是其表示的含義一定是不一樣的.
5.字串長度
字串長度指的是第乙個'\0'結束之前的字元的個數
三、乙個經典的面試題:
如何用一句話實現求字串的長度
[html]
#include
#include
int strlen(char *s)
int main()
C語言指標和陣列總結
1.指標的定義 以char 為例,即指標指向的char型別的變數 char p 這裡可以等於空,可以等於位址,還可以等於字串 char p adlkfjalksdf p指標指向的記憶體存放的是這個字串 char p1 x p指標指向的記憶體存放的是變數x char p char malloc siz...
C語言指標陣列和陣列指標
初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣...
C語言指標陣列和陣列指標
初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣...