C/C++中的*和& 分類: 雜文 編程 2014-10-25 11:03 77人閱讀 評論(0) 收藏

最近看程序的時候對&和*的理解仍是有點問題,索性寫篇文章重頭理清一下。ide

首先,左值和右值的問題。spa

咱們知道對於*和&,左值和右值的含義是不同的,如指針

  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.     int a = 0;
  5.     int *p = &a;
  6.     printf("The value is: %d/n", *p);
  7.     return 0;
  8. }

*表示的是指針,int 是指針的類型,int *p是定義一個整型的指針p,指向的是變量a的地址.而等式右邊的&是取地址,&a是變量a的地址。能夠看出,左邊的*和右邊的&是相對應的,咱們只能把右邊變量的地址值賦給指針,而不能把變量直接賦給指針。ci

  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.     int a = 0;%地址是0x0012ff60
  5.     int *p = a;
  6.     printf("The value is: %d/n", *p);
  7.     return 0;
  8. }
有意思的是,即便咱們知道&a的輸出值是1638208,咱們也不能直接把1638208賦給*p,以下是運行不了的

  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.     int a = 0;%地址是0x0012ff60
  5.     int *p = 1638208;
  6.     printf("The value is: %d/n", *p);
  7.     return 0;
  8. }

綜上,string

*做爲左值時,是類型,int *p能夠理解爲int* p,p是整形指針類型,存儲的值是與整形指針類型對應的地址類型&a,並且這個地址中存儲的值也是整數類型的,地址&a(p)能夠以整數的形式顯示出來,可是不能接受整數的賦值。it

*做爲右值時,是操做,p自己是指針類型,可是p的值是地址,*p能夠理解爲經過指針類型p中的地址去找到地址中的值。io

&做爲左值時,是類型, int &p=a是定義一個整形的引用p.class

&做爲右值時,是操做,取地址的操做。import


版權聲明:本文爲博主原創文章,未經博主容許不得轉載。變量

相關文章
相關標籤/搜索