c 語言-指針(入門篇1)

前言:以上的入門篇知識均來自譚浩強c語言書籍,清華大學出版社。其中例子均屬本人胡鄒。與原書作者毫無關系。

入門的指針學習,將從七個方面進行介紹,這是指針最基本的用法,需要掌握。

一、地址和指針的概念

1.地址:內存區的每一個字節有一個編號,這就是地址。來自百度百科:由于我們現在使用的是80x86這種微處理器,所以我們可以把地址分為三類:第一類:邏輯地址:機器語言指令仍用這種地址指定一個操作數的地址或一條指令的地址。這種尋址方式在Intel的分段結構中表現得尤為具體,它使得MS-DOS或Windows程序員把程序分為若干段。每個邏輯地址都由一個段和偏移量組成。

第二類線性地址:線性地址是一個32位的無符號整數,可以表達高達2^32(4GB)的地址。通常用16進制表示線性地址,其取值范圍為0x00000000~0xffffffff。

第三類物理地址:也就是內存單元的實際地址,用于芯片級內存單元尋址。物理地址也由32位無符號整數表示。

2.指針:將地址形象化的稱為“指針”。意思就是通過她能找到以他為地址的內存單元。在信息科學中,指針一般指向一個函數或一個變量。在使用一個指針時,一個程序既可以直接使用這個指針所存儲的內存地址,又可以使用這個地址里存儲的函數值。

指針和指針變量是不同的兩個概念:指針是一個地址,而指針變量是存放地址的變量。

例外還有一個概念:直接訪問:就是按照變量地址存取變量值的方式,間接訪問:將變量i的地址存放到臨沂個變量中。舉個例子:你跟小三約好去開房,有兩種方式見到她,第一種就是小三饑渴的不行,直接和你約見面的地點,打開門就看見她。這叫直接訪問,另外一種就是,小三說,想跟你玩個游戲,當你打開見面的房門里邊有個紙條,上邊寫著,今天來點刺激的,寫下了一個地址,xx樂園魔天倫28號。于是你就是哪里找她了。這就叫間接訪問。

二變量的指針和指向變量的指針變量

變量的指針就是變量的地址,存放變量地址的變量是指針變量,他用來指向另外一個變量。在信息工程中,“*”符號表示“指向”的對象。如果定義i_pointer所指向的變量。

1定義一個指針變量

c規定,在所有的變量使用前,必須要定義變量,指定其類型,這樣方便分配內存單元。但是指針跟其他變量不一樣,他是用來專門存放地址的。

特別注意兩點:第一,‘*’代表的是指針類型。第二,指針變量必須有類型,因為不同的指針變量類型,在操作時會受到影響。

2指針變量的引用

指針變量中只能存放地址(指針),不要將一個整數(或者任何其他非地址類型的數據)復制給一個指針變量。

*i_pointer_1=100;(不合法);

兩個運算符需牢記:

(1)&:取地址運算符。

(2)*:指針運算符(或稱“間接訪問”運算符),

取指針所指向的對象的內容。

E.p:&a為變量a的地址,*p為指針變量p所只想的存儲單元的內容(即p所指向的變量的值)

如:通過指針變量訪問整形變量。

include

void main()

{ int a,b;

int *pointer_1,*pointer_2;

pointer_1=&a;

pointer_2=&b;

a=100;b=10;

printf(“%d,%d\n”,a,b);

printf(“%d,%d\n”,*pointer_1,*pointer_2);

}

特別注意:(括號的重要性)(*pointer_1)++相當于a++。注意括號的必要性,如果沒有括號,就成為了*pointer_1++,++與*是同一級別運算符,因此結合方向自右向左,它相當于*(pointer_1++)。由于++在pointer_1的右側,是后加,因此先對pointer_1的原值進行*運算,得到的a值,然后使pointer_1的值改變,這樣pointer_1不再指向a了。

3指針變量作為函數參數

函數的參數不一定是整型,浮點型,字符型等數據,也可以是指針類型,他的作用是將一個變量的地址傳送到另一個函數中。

E.m:比較兩個整數,順序輸出整數。

#include

void main()

{ void swap(int *p1,int *p2); //聲明一個函數,在后邊需要使用。

int a,b;

int * pointer_1,* pointer_2;

scanf(“%d,%d”,&a,&b);

pointer_1=&a; pointer_2=&b;

if(a

printf(“%d,%d\n”,a,b);

}

void swap(int *p1,int *p2)//前邊聲明的函數

{ int temp;//定義為int temp,而不是int*temp,因為交換的是值。

temp=*p1;

p1=p2;

*p2=temp;

}

三、數組與指針

數組在內存中占用存儲單元,并且有相應的存儲地址。指針可以指向int,char,等變量類型,也可以指向數組。所謂的數組元素的指針就是數組元素的地址。

1數組元素的指針

它的賦值方式int*p=&a[0]//把數組a0的地址賦值給p;

它也等價于:int*p;p=&a[0];

2通過指針引用數組變量

E.m:輸出數組中的全部元素。下面介紹三種方法:

(1)下標法

#include

void main()

{ int a[10];//數組中一共有十個元素,所以數組下標一定要注意。

int i;

for(i=0;i<10;i++)

scanf(“%d\n”,&a[i]);

for(i=0;i<10;i++)

printf(“%d\n”,a[i]);

}

(2)通過數組名計算數組元素地址,找出元素的值

#include

void main()

{ int a[10];//數組中一共有十個元素,所以數組下標一定要注意。

int i;

for(i=0;i<10;i++)

scanf(“%d\n”,&a[i]);

for(i=0;i<10;i++)

printf(“%d\n”,*(a+i));//利用數組的名稱計算地址。不能寫成*a+i,意義完全不同。

}

(3)用指針變量指向數據元素

#include

void main()

{ int a[10];

int i,*p;

for(i=0;i<10;i++)

scanf(“%d\n”,&a[i]);

for(p=a;p

printf(“%d”,*p);

}

比較:(1),(2)兩種方法的時間復雜度相等,(3)比其他兩種方法快。原因在于:用指針變量直接指向元素,不必每次都重新計算地址。

四、字符串與指針

1字符串的表示形式

c語言中,有兩種方式可以訪問一個字符串,第一是:用字符數組存放一個字符串,然后輸出。第二是,用字符指針指向一個字符串。

以上基礎入門篇的一部分學習,還有許多知識點需要進一步學習。

開始寫Log的原因是因為想要去華為工作,現在進行知識點的惡補,因為好久沒有使用c了。看看自己在準備的這個過程中能學到多少東西,進行總結,可以進行客觀的學習效率評價。

2016/8/20

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內容

  • 指針是C語言中廣泛使用的一種數據類型。 運用指針編程是C語言最主要的風格之一。利用指針變量可以表示各種數據結構; ...
    朱森閱讀 3,464評論 3 44
  • 前言:指針是 C語言一個重要概念,也是C 語言的一個重要特色。使程序簡潔、緊湊、高效。指針乃是C之精華。 數據在內...
    瀟湘候晨雪閱讀 776評論 0 0
  • 1.語言中變量的實質 要理解C指針,我認為一定要理解C中“變量”的存儲實質, 所以我就從“變量”這個東西開始講起吧...
    金巴多閱讀 1,801評論 0 9
  • 計算機二級C語言上機題庫(南開版) 1.m個人的成績存放在score數組中,請編寫函數fun,它的功能是:將低于平...
    MrSunbeam閱讀 6,433評論 1 42
  • 文/李健 圖/小魚 媳婦第一次跟我回老家前,跟我提了一個非常嚴肅的問題:廁所怎么上? 我之前壓根就沒有考...
    煙村拾記閱讀 319評論 2 1