C語言指針用法詳解 (三) 二重指針


二重指針

例子1:

  • Question

    int **ptr1 = NULL;
    cout<<"情況一   ptr1 == "<<ptr1<<endl;
    cout<<"情況一  *ptr1 == "<<*ptr1<<endl;
    cout<<"情況一 **ptr1 == "<<**ptr1<<endl;
   /// 輸出 :0  非法 非法
  • Reason:

1) 三省指針: 指針 ptr1  的類型是 int ** ,指向的類型 int*,  指定為空
2) *ptr1 是 ptr 指向的指向 ,即空的指向,非法
3) **ptr1 是 ptr 指向的指向的指向 ,即空的指向的指向,非法

例子2:

  • Question

    int * p1 = (int * )malloc(sizeof(int));
    int **ptr2 = &p1;
    cout<<"情況二   ptr2 == "<<ptr2<<endl;
    cout<<"情況二  *ptr2 == "<<*ptr2<<endl;
    cout<<"情況二 **ptr2 == "<<**ptr2<<endl;
  • Practice:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int * p1 = (int * )malloc(sizeof(int));
    int **ptr2 = &p1;
    cout<<"情況二     p1 == "<<p1<<endl;
    cout<<"情況二    *p1 == "<<*p1<<endl;
    cout<<"情況二    &p1 == "<<&p1<<endl;
    cout<<"情況二   ptr2 == "<<ptr2<<endl;
    cout<<"情況二  *ptr2 == "<<*ptr2<<endl;
    cout<<"情況二 **ptr2 == "<<**ptr2<<endl;
}

 

  • Reason:

 

1)三省指針:指針 p  的類型是 int * ,指向的類型 int,  初始化為沒有指定其指向
2)三省指針: 指針 ptr2  的類型是 int ** ,指向的類型 int*,  指針p的地址  (注意此時 ptr2 與 &p 類型相同 都是  int** ,才可以賦值) 
3)*ptr2 是 ptr2 指向 ,即&p1的指向,為p1
4)**ptr2 是 ptr2 指向的指向 ,即*ptr2的指向,為*p1
5)指針即是地址,所以   看作 &p1 指向 p1

例子3:

  • Question

   int * p2 = (int * )malloc(sizeof(int));
    int num = 6;
    p2 = #
    int **ptr3 = &p2;
  • Practice:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int * p2 = (int * )malloc(sizeof(int));
    int num = 6;
    cout<<"情況三     p2 == "<<p2<<endl;
    p2 = #
    int **ptr3 = &p2;
    cout<<"情況三     p2 == "<<p2<<endl;
    cout<<"情況三    *p2 == "<<*p2<<endl;
    cout<<"情況三    &p2 == "<<&p2<<endl;
    cout<<"情況三   &num == "<<&num<<endl;
    cout<<"情況三   ptr3 == "<<ptr3<<endl;
    cout<<"情況三  *ptr3 == "<<*ptr3<<endl;
    cout<<"情況三 **ptr3 == "<<**ptr3<<endl;
}
 

  

 

  • Reason:

1)三省指針:指針 p2  的類型是 int * ,指向的類型 int,  初始化 沒有指向,后指向為&num(注意此時 p2 與 &num 類型相同 都是  int* ,才可以賦值) 
2)三省指針: 指針 ptr3  的類型是 int ** ,指向的類型 int*,  指針p2的地址  (注意此時 ptr2 與 &p2 類型相同 都是  int** ,才可以賦值) 
3)*ptr3 是 ptr3 指向 ,即&p2的指向,為p2
4)**ptr3 是 ptr3 指向的指向 ,即*ptr3的指向,為*p2
5)指針即是地址,所以   看作 &num 指向 num,看作 &p2 指向 p2
 
吐吐吐吐吐吐吐槽:寫博客好累啊啊啊啊啊,博客園為啥這么不好用,是我打開的方式不對嗎????


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM