C語言 | * 與 &

取址運算符&

  • 取址運算符&用來取得其操作數的地址。
  • 如果操作數 x 的類型爲 T,則表達式 &x 的類型是 T 類型指針(指向 T 的指針)。
  • 取址運算符的操作數必須是在內存中可尋址到的地址。該運算符只能用於函數或對象

間接運算符 *

  • 當已具有一個指針,並且希望獲取它所引用的對象時,使用間接運算符 *(indirection operator),有時候這會被稱爲解引用運算符(dereferencing operator)。
  • 它的操作數必須是指針類型
  • 如果 ptr 是指針,那麼 *ptr 就是 ptr 所指向的對象或函數。

例子

初始化指針,以指向某些對象或函數時,需要獲得這些對象或函數的地址

  • *與&具有互補性
float x, *ptr;
*&x代表x
&*ptr代表ptr
&ptr代表指向ptr的地址,爲`**float`類型
  • 定義一個float指針ptr,指向x的地址
float x, *ptr = &x;
等同於
float x, *ptr;
ptr=&x;
  • 示例
    int *p1,a=1;
    p1=&a;
    cout<<"p1="<<p1<<endl;
    cout<<"*p1="<<*p1<<endl;

    int *p2=&a;
    cout<<"p2="<<p2<<endl;
    cout<<"*p2="<<*p2<<endl;
	
	++*p2;
    cout<<"p1="<<p1<<endl;
    cout<<"*p1="<<*p1<<endl;
    cout<<"p2="<<p2<<endl;
    cout<<"*p2="<<*p2<<endl;
    cout<<"a="<<a<<endl;
    int **p3=&p1;
    cout<<"&p1="<<&p1<<endl;
    cout<<"p3="<<p3<<endl;
    cout<<"*p3="<<*p3<<endl;
    cout<<"**p3="<<**p3<<endl;

p1,p2的值保持不變,但是a的值變成了2
p3**int類型,*p3的值等於p1,p2**p3的值等於a
輸出爲

p1=0x61fe04
*p1=1
p2=0x61fe04
*p2=1
p1=0x61fe04
*p1=2
p2=0x61fe04
*p2=2
a=2
&p1=0x61fe08
p3=0x61fe08
*p3=0x61fe04
**p3=2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章