一個挺有意思的code

來源:互聯網
上載者:User
1. 例子:int i, arr[10], *p=arr;分開來就是:
int i;
int arr[10];
int *p = arr; 這裡int *p = arr; 相當於:  int *p;p = arr; 也就是說賦值的時候*p只代表它是一個指標變數,而p=arr才是它的指派陳述式.  初始化裡面的*號表示這個變數是指標類型int *a,則a是(int *)類型,
不在初始化裡,*a表示指向的記憶體單元裡存的值

*p表示數組的第一個元素了,即arr[0];
int main(){    int **p;    int a;        *p = &a;        printf("%x\n", p);}// 斷錯誤int main(){    int *p;    int a;        p = &a;        printf("%x\n", p);}// 正常

 

這個也是我自己編程過程碰到的一個問題

 

int main(){  int **p2;  int *p1;  p2=&p1; //p2 如果不指向一個確定的變數的話,直接 *p2 是一個危險的操作,你不知道指向了什麼單元  //後面的賦值寫操作更危險了  int a;      *p2 = &a;      printf("%x\n", p1);  return 0;}

 

指標沒有初始化,而直接對其賦值操作,危險
另外即使初始化也要初始化個有效地址,否則也會出錯

因為**p 是個二維指標,你寫 *p = &a;
只是給*p初始化,但是沒有給**p初始化,所以報錯。
因為**p 是個二維指標要指向二維的變數

說白了就是 *p 指向一個記憶體,**p 指向另一個記憶體,
你只給*p 賦值,沒有給**p賦值。
所以包沒有初始化錯誤

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.