指针01 - 零基础入门学习C语言41
生活随笔
收集整理的這篇文章主要介紹了
指针01 - 零基础入门学习C语言41
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
第八章:指針01
?讓編程改變世界
Change the world by program
?
指針啥玩意?似乎很神秘?
? 指針是C語言中的一個重要的概念,也是C語言的一個重要特色。 正確而靈活地運用它,可以有效地表示復雜的數(shù)據(jù)結(jié)構(gòu);能動態(tài)分配內(nèi)存;能方便地使用字符串;有效而方便地使用數(shù)組…… 掌握指針的應用,可以使程序簡潔、緊湊、高效。可以說,不掌握指針就是沒有掌握C的精華。 ?地址和指針的概念
為了說清楚什么是指針,必須弄清楚數(shù)據(jù)在內(nèi)存中是如何存儲的,又是如何讀取的。 [caption id="attachment_141" align="aligncenter" width="300"] 地址和指針的概念[/caption] ? 內(nèi)存區(qū)的每一個字節(jié)有一個編號,這就是“地址” 。如果在程序中定義了一個變量,在對程序進行編譯時,系統(tǒng)就會給這個變量分配內(nèi)存單元。 在C語言中,對變量的訪問有兩種方式,直接訪問和間接訪問。 ?關于直接訪問和間接訪問
? 打個比方,為了開一個A抽屜,有兩種辦法: 一種方法是:將A鑰匙帶在身上,需要時直接找出該鑰匙打開抽屜:取出所需的東西。 另一種辦法是:為安全起見,將該A鑰匙放到另一抽屜B中鎖起來。如果需要打開A抽屜,就需要先找出B鑰匙,打開B抽屜,取出A鑰匙,再打開A抽屜,取出A抽屜中之物。 ? 直接訪問如:a=5;? 系統(tǒng)在編譯時,已經(jīng)對變量分配了地址,例如,若變量a分配的地址是2000,則該語句的作用就是把常數(shù)5保存到地址為2000的單元。 間接訪問如:scanf("%d",&a); 調(diào)用函數(shù)時,把變量a的地址傳遞給函數(shù)scanf,函數(shù)首先把該地址保存到一個單元中,然后把從鍵盤接收的數(shù)據(jù)通過所存儲的地址保存到a變量中。 ?初識指針
在C語言中,指針是一種特殊的變量,它是存放地址的。假設我們定義了一個指針變量int *i_pointer
用來存放整型變量 i 的地址。 可以通過語句:i_pointer =&i; [caption id="attachment_142" align="aligncenter" width="259"] 地址和指針的概念[/caption] ? 將i的地址(2000)存放到i_pointer中。這時, i_pointer的值就是(2000) ,即變量i所占用單元的起始地址。 要存取變量i的值,可以采用間接方式:先找到存放“i的地址”的變量i_pointer ,從中取出i的地址(2000),然后取出i的值3。 ? [caption id="attachment_143" align="aligncenter" width="249"] 地址和指針的概念[/caption] ?初識兩個操作符“*”和“&”
? *:這玩意叫做取值操作符 &:而這玩意叫做取址操作符 如:int i = 2000;
int *pointer;
pointer = &i;
printf("%dn", *pointer);
?指針與指針變量
知道了一個變量的地址,就可以通過這個地址來訪問這個變量,因此,又把變量的地址稱為該變量的“指針” 。 C語言中可以定義一類特殊的變量,這些變量專門用來存放變量的地址,稱為指針變量。 ? 注意:指針變量的值(即指針變量中存放的值)是地址(即指針)。 請區(qū)分“指針”和“指針變量”這兩個概念。 ?定義一個指針變量 "*"
下面都是合法的定義:float *pointer_3; // pointer_3是指向float型變量的指針變量
char *pointer_4; // pointer_4是指向字符型變量的指針變量
[caption id="attachment_145" align="aligncenter" width="280"] 地址和指針的概念[/caption] ? 可以用賦值語句使一個指針變量得到另一個變量的地址,從而使它指向一個該變量。 ?在定義指針變量時要注意兩點
一、指針變量前面的“*”,表示該變量的類型為指針型變量。 其一般形式為:類型說明符 *變量名; 其中,*表示這是一個指針變量,變量名即為定義的指針變量名,類型說明符表示本指針變量所指向的變量的數(shù)據(jù)類型。 例如: ?float *pointer_1; 指針變量名是 pointer_1 ,而不是 * pointer_1 。 ? 二、在定義指針變量時必須指定基類型。 需要特別注意的是,只有整型變量的地址才能放到指向整型變量的指針變量中。下面的賦值是錯誤的∶float a;
int * pointer_1;
pointer_1=&a;
/* 將float型變量的地址放到指向整型變量的指針變量中,錯誤 */ ?指針變量的引用 “&”
請牢記,指針變量中只能存放地址(指針),不要將一個整數(shù)(或任何其他非地址類型的數(shù)據(jù))賦給一個指針變量,否則編譯器也會把該值當成 一個地址來處理。 C語言中提供了地址運算符&來表示變量的地址。 其一般形式為:&變量名; 如&a表示變量a的地址,&b表示變量b的地址。當然,變量本身必須預先聲明。 ?代碼分析
[codesyntax lang="c"] #include <stdio.h>void main() { int a,b;int *pointer_1, *pointer_2;a=100; b=10;pointer_1 = &a;pointer_2 = &b;printf("%d,%dn",a,b);printf("%d,%dn",*pointer_1, *pointer_2); } [/codesyntax] ? [buy]?獲得所有教學視頻、課件、源代碼等資源打包?[/buy] [Downlink href='http://kuai.xunlei.com/d/LIHHCPRSYQNN']視頻下載[/Downlink]轉(zhuǎn)載于:https://www.cnblogs.com/LoveFishC/archive/2011/01/22/3846024.html
總結(jié)
以上是生活随笔為你收集整理的指针01 - 零基础入门学习C语言41的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WIndows via C/C++ 学习
- 下一篇: 手机PIN锁死让输入PUK解决方案