日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

指针的使用二级指针

發布時間:2025/3/15 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 指针的使用二级指针 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include <iostream>using namespace std; // 二級指針的使用 [11/24/2017 Andrew]struct Teacher {char name[64];int age; }; // 在被調用函數中獲取資源必須使用二級指針,因為局部函數 //中申請的變量會在函數調用結束的時候被釋放掉,因此要使用二級指針 獲取申請內存的實際地址 //這樣就算局部函數申請結束的時候,也能夠得到想要的內存空間 int getTeacher(Teacher **p) //傳進來的指針是傳值,多以編譯器會從新申請一個指針,只不過跟原來的指針指向同一個內存區域 //會被編譯但是新的指針的改變并不會改變原來指針值,只能通過指針改變指針指向的值,反過來要想改變指針必須使用指向指針的指針 //函數結束的時候p 被釋放但是 *p 沒有被釋放 //因為在C語言中函數的參數是傳值的 參數的類型是 Teacher ** 因此 p被重新聲明一個變量{Teacher *temp = NULL;if( p == NULL ){return -1;}temp = (Teacher *) malloc(sizeof(Teacher));if(temp == NULL){return -2;}temp ->age =33;//通過修改實參的地間接的修改實參的值*p = temp;return 0; }int main() {Teacher *pt1= NULL;getTeacher(&pt1); //getTeacher(Teacher **p = &pt1)cout << "age :" << pt1->age << endl;system("pause"); return 0; }

當使用以一級指針的時候,就不能達到修改指針的效果

#include <iostream> using namespace std; struct Teacher {char name[64];int age; }; int getTeacher(Teacher *p) {Teacher *temp = NULL;if( p == NULL ){return -1;}temp = (Teacher *) malloc(sizeof(Teacher));if(temp == NULL){return -2;}temp ->age =33;p = temp;return 0; }int main() {Teacher *pt1= NULL;getTeacher(pt1); //getTeacher(Teacher *p = pt1)這是真實的調用過程雖然,雖然 p 和pt1的值相同,但是改變p并不是改變pt1。//通過類比也可以明顯的知道,想要改變數值可以通過指針,因此想要改變指針需要使用指向指針的指針;cout << "age :" << pt1->age << endl;system("pause"); return 0; }先從一個指針說起 假設 int* B = C;那么,B是一個指針,指向C, *B 是B的解引用 也就是C的值,但是B指向的內容是C的值,B也占內存,因此B也有自己的地址;那么看來當是二級指針的時候,

*A= B = 0x00000008
* A = B = “abscd”;
A = &B = 0x00000004;
&A = 0x00000005;

二級指針的使用 二級指針作為函數參數的作用:在函數的外部定義一個指針p,在函數的內部給指針賦值,函數結束后對指針p生效,那么我們就需要使用二級指針。 因為:編譯器總是要為函數的每一個參數制作臨時副本

#include
using namespace std;
int a = 10;
int b = 100;
int *q;

void func(int **p)
{
cout << “func: &p = “<< &p << “, p =” << endl;
*p = &b;
cout <<”func : &p =” << &p << “,p = “<

使用引用實現的函數申請內存

#include

using namespace std;
// 二級指針的使用 [11/24/2017 Andrew]

struct Teacher
{
char name[64];
int age;
};
// 在被調用函數中獲取資源必須使用二級指針,因為局部函數
//中申請的變量會在函數調用結束的時候被釋放掉,因此要使用二級指針 獲取申請內存的實際地址
//這樣就算局部函數申請結束的時候,也能夠得到想要的內存空間
int getTeacher(Teacher **p) //傳進來的指針是傳值,多以編譯器會從新申請一個指針,只不過跟原來的指針指向同一個內存區域
//會被編譯但是新的指針的改變并不會改變原來指針值,只能通過指針改變指針指向的值,反過來要想改變指針必須使用指向指針的指針

{
Teacher *temp = NULL;
if( p == NULL )
{
return -1;
}
temp = (Teacher *) malloc(sizeof(Teacher));
if(temp == NULL)
{
return -2;
}
temp ->age =33;
//通過修改實參的地間接的修改實參的值
*p = temp;

return 0;

}
//C++中的指針的引用
int getTeacher2(Teacher * &myp)
{
//因為使用的是引用,因此給myp賦值就相當于給main函數中的pt1賦值
myp = (Teacher *) malloc(sizeof(Teacher));
if( myp == NULL )
{
return -1;
}
myp ->age =36;
return 0;

}
void FreeTeacher(Teacher *pt)
{
if(pt == NULL)
{
return ;
}
free(pt);
}
int main()
{
Teacher *pt1= NULL;
// 1 C語言中的二級指針 [11/24/2017 Andrew]
getTeacher(&pt1);
cout << “age :” << pt1->age << endl;
FreeTeacher(pt1);
// 2 C++中的指針的引用 [11/24/2017 Andrew]
getTeacher2(pt1);
cout << “age :” << pt1->age << endl;
FreeTeacher(pt1);
system(“pause”);
return 0;
}
“`

總結

以上是生活随笔為你收集整理的指针的使用二级指针的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。