1樓:
1.概念問題:指標是指存放地址值的變數或常量;指標與一般變數或常量的區別,在於它不直接儲存數值,而是存放被儲存數值的地址,屬於間接存放,所以不少初學者感覺學習困難。
比如表示將指標ptr指向變數a,存放a的地址,假設是2000h,而指標變數ptr本身也要有地址,假設是3000h,明顯 ptr和&ptr是不相等的,千萬不要搞混。常見用法:
ptr=&a; 指標ptr指向變數a
b=*ptr; 將ptr所指內容存入b,b=a
c=&ptr; 將ptr地址存入c,c與&a或&b明顯不同
2. *問題:*在指標部分有兩種用法,一是定義指標變數,比如 char *p;二是表示取指標變數所指的內容,比如char ch,*p; *p=ch;
&問題:&指取變數地址,比如 p=&ch;將指標指向ch,即p的值=ch變數的地址
3.指標與陣列問題:陣列的名字本身代表該陣列的首地址,要區分地址與數值之間的關係,比如char c[10], *p;
(1)p=c;表示指標p指向陣列c,相當於p=&c[0];c和&c[0]都是表示首地址
(2)c[0],c[1],...c[9]都是表示陣列中每個具體變數的值,前面加&才是其地址,與指標相連時,一般是p=&c[1]形式,只有指向c[0]時,才能省略為p=c
4.還有一些複雜的指標應用,比如指向指標的指標,或者指向函式的指標,那些更復雜,二級考試中很複雜的一般考的不多,建議將基本的學習好;這個東西要靠自己慢慢理解,理解了,其實簡單,不理解,很難,呵呵。
寫了不少,希望能對你的學習有所幫助,不對的地方,請海涵!
2樓:娛樂文風
30分鐘徹底學會c語言指標
3樓:匿名使用者
可以理解是相反的關係,&是取地址,而*是取地址裡的數,定義char *p ,就是定義了一個指標變數,它是專門用來存地址的,p=&a[2], 就是先取陣列第三個元素的地址,然後賦給p,*p=&a[2],不對哦,兩邊型別不一樣,*p是一個數值,就是取指標p地址裡面的數,而&a[2]是取第三個元素的地址,所以不能賦值哦。呵呵,指標這個比較複雜,你可以先看一下,譚浩強的c語言書,漫漫就會學會的
4樓:匿名使用者
c中的指標算是最難的一塊了。建議朋友指標和陣列一起學習。會更容易些。
5樓:邏輯錯誤
看看王爽的《組合語言》吧.
裡面講的很清楚.
可以這樣理解( 個人理解 ),任何一個變數都是一個地址.比如:0x12ff84等等.
以你的題目為例,
(注意:)p是一個地址,這裡p=&a[2], 那麼p的地址就是a[2]的地址.
(注意:)*p=&a[2]就是p的地址裡面的值是a[2]的地址.
(警告:)這裡p的地址,p的地址可以是任何一個變數的值.比如:
p=&a[2].如果你不給它值,那麼他就是個隨機的值,瞎雞b亂指,愛指哪兒就是哪兒.*p就不一樣了,*p=&a[2]就是系統給你的一個可以用的地址,裡面存的是a[2]的地址所擁有的值.
c語言的指標有什麼優缺點?
6樓:愛夏的你呀
1、指標的優點
是標識一塊記憶體。電腦記憶體上的每一個位元組都具有一個編號,稱為地址(可以簡單理解為指標),任何讀寫記憶體的指令都必須攜帶地址資訊,否則電腦不知道讀寫那塊記憶體。
不管程式是用什麼語言寫的,要執行資料和**必須駐留記憶體,cpu要執行指令必須有一個「指標」程式計數器指向記憶體的**塊,如果某個指令要操作記憶體資料,該指令必須攜帶額外的地址資訊。
2、指標的缺點
指標可以操作任何東西,所以指標很靈活、很強大,但也引入了複雜性。
擴充套件資料
1、指標利用地址,它的值直接指向(points to)存在電腦儲存器中另一個地方的值。由於通過地址能找到所需的變數單元,可以說,地址指向該變數單元。
2、輸出一串字元時,只需要知道它的第一個字元的地址,就可以將這個字串輸出,而第一個字元的地址,可以用指標儲存。所以有n個字串時,就可以用n個指標來儲存。
3、為了儲存一個資料在記憶體中的地址,就需要指標變數。因此指標是程式資料在記憶體中的地址,而指標變數是用來儲存這些地址的變數。
7樓:文化廚子
指標是c語言只所以如此成功的重要原因之一,當然任何事物,往往都是一體兩面的,本質上是一體,看上去是兩面,關鍵是要活學活用,沒比較過分的區別優點、缺點。
c語言主要是針對硬體及系統底層程式設計的,在針對硬體及系統底層程式設計中,對資料的靈活性要求較高,換句話說資料的意義需要經常變動,而資料型別決定了資料的意義,指標一個重要作用是實現對資料型別的轉換,比如要將機器碼為0x3f8ccccd表示成浮點數:
#include
int main()
指標這種能改變資料上下文環境的能力是非常有用的, 比如檢測cpu所支援的儲存順序。
#include
char endian(void)
int main()
如果c語言沒有指標,當然可以想出其它的方法,但是遠沒有指標方便。
指標的缺點,可能對於初學者來說 ,往往不容易理解,而且使用指標程式設計經常會出現一些莫名其妙的錯誤,而且在平時使用c語言進行應用程式開發時,好像指標真的不怎麼有用,這些都不是問題,關鍵是看個人學習c語言的用處,做什麼開發,上什麼專案。
8樓:51cto學院
記憶體對齊的緣故。
p_buf 作為一個指標,它的值是記憶體的某個位元組的地址。
如果想要把 p_buf 強制轉換成一個 unsigned int*型別的指標,
需要滿足一個必要條件,就是 p_buf 的值必須能夠被4整除。(之所以是4,是因為 unsigned int 是要佔4個位元組的)。
9樓:匿名使用者
說那麼多幹什麼勒..
指標我覺得是畫蛇添足..沒有什麼好與不好.
可的情況還是需要用指標,不過覺得不多.
c語言指標簡單習題(剛學的指標,程式別太複雜)
10樓:匿名使用者
第一題#include
void fun1(char* str, int m, int k)}int main()
第二題#include
void fun2(char* str1, char* str2)else if (*p < *q)
else
}if (*p)
return -1;
}int main()
11樓:來自龍王山謹慎的錦屏藤
ajwdioajdoiawjiddawdwadawdwad
c語言中指標變數取值問題,c語言初學者,求指點
12樓:匿名使用者
總共12個4位元組,每次加一代表移動一個4位元組,確實沒有錯.
你所有的資料總共是12個,移動4次後換行,也就說12個數字會分成3行列印,每行4個數字,
這個4次和一個int的4位元組沒有關係.
13樓:匿名使用者
你定義的int型指標p,所以沒當p++的時候,p內的地址會加sizeof(int)個位元組的長度,也就是4個自己,你可以試一試float的,應該就是sizeof(float)個位元組了
14樓:束已
這裡的2000,你可以理解為你家的門牌號,然後2000這個對應的門牌號的家有多大,就看系統分多大了,不用糾結這個4位元組。想理解更清楚,可以試試把p++改為++p,相比較,你可能會明白些什麼。
15樓:匿名使用者
地址之間的操作不是簡單的加減,而是看相差幾個指標指向的資料型別
c語言指標符號問題,C語言指標符號問題?
當你想儲存一個地抄址的時候不加 int a 0 p a 當你想取指標裡的值 的時候加 int b b p b a b 0 就是說把a地址儲存的值取出來。當 p的值還是指標的時候 int p null int q null int a 0,b 1 q a p q p a 結果就是q 指向a p指向q ...
c語言初學者,C語言如何入門
沒有包含標頭檔案,函式enter,add這些都沒有定義。1 譚浩強的書也是人寫的。可以看,但是不管是國內還是國外的,肯定是盡信書不如無書。始終要有書本的知識經過自己的檢驗轉換為自己腦海中的知識的過程。何況我認為初學者比起直接看國外的書先看看國內的書未嘗不可。我剛開始看國外的書就有點吃不消,主要是表達...
c語言指標習題,C語言指標習題
main 答案是 afgd while i 最後列印出str的地址 字母 s str地址沒有變過。char p1,p2,str 50 abcdefg p1 abcd 將 abcd 首地址賦值給p1,也就是將p1指向字串 abcd p2 efgh 將 efgh 首地址賦值給p2,也就是將p2指向字串 ...