程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C指針解析 ------ 運算符&和*

C指針解析 ------ 運算符&和*

編輯:關於C語言

C指針解析 ------ 運算符&和*


本文是自己學習所做筆記,歡迎轉載,但請注明出處:http://blog.csdn.net/jesson20121020


& 是取地址運算符,* 叫做指針運算符或間接運算符。&a 的運算結果是一個指針,指針的類型是a的類型加上*,指針所指向的類型是a的類型,指針的值也就是指針所指向的內存區就是a的地址。 *p的運算結果就多了,總之,*p的結果是p所指向的東西,這個東西有這些特點: 它的類型是p所指向的類型,它所占用的地址是p所指向的地址。

看下面的例子:

int a = 5;

int b;

int *p;

int **q;

p = &a; //&a的結果是一個指針,類型為int*,指向的類型為int,指向的地址是a的地址。

*p = 10; //*p的結果,在這裡它的類型是int,它所占用的地址就是p所指向的地址,也就是a的地址。顯然這裡的*p就是變量a,這句代碼的實質就是為a重新賦值。

q = &p; //&p的結果是一個指針,類型為p的類型加上*,在這裡是int **。該指針所指向的類型為p的類型,這裡就是int*。該指針所指向的地址就是指針p的地址。

*q = &b; // *q是一個指針,&b的結果也就是個指針,且這兩個指針的類型和所指向的類型是一樣的,所以這句代碼的意思就是為*q賦值。

**q = 34; // *q的結果是q所指向的東西,在這裡是一個指針即int*,而對這個指針再做一次*運算,結果就是一個int型的變量了,它所占用的地址就是*q所指向的地址,也就是b的地址,所以這句的目的就是給變量b賦值。

最後,可以驗證下:

#include 
int main(){
	int a = 5;
    int b;
    int *p;
    int **q;
    printf("a = %d\n",a);
    p = &a;        
    *p = 10;
    printf("a = %d\n",a);       
    q = &p;       
    *q = &b;         
    **q = 34; 
    printf("b = %d\n",b);
}
結果:

a = 5
a = 10
b = 34

總之,要理解這兩個運算符,需要把握住兩個運算的結果的類型和所指向的類型。



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved