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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

共享内存 传一个类指针_C++指针

發布時間:2025/3/15 c/c++ 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 共享内存 传一个类指针_C++指针 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

指針一直是C語言和C++語言最難理解的一部分,無論是C語言和C++語言,復雜的數據結構都是離不開指針的運用,所以必須掌握好指針這個數據類型,你才能夠在閱讀框架代碼時,游刃有余。今天我們從指針的本質來重新理解指針這個數據類型。

1.指針的本質

指針是用來保存地址的一個變量,那么變量都是保存在內存中,而內存其實就是一組有序字節組成的數組,每個字節有唯一的內存地址。CPU 通過內存尋址對存儲在內存中的某個指定數據對象的地址進行定位。說白了,CPU就是通過地址去查找存儲在內存中的數據。下面我們看看如下示意圖:

這是一個 4GB 的內存,可以存放 2^32 個字節的數據。左側的連續的十六進制編號就是內存地址,每個內存地址對應一個字節的內存空間。而指針變量保存的就是這個編號,也即內存地址。指針本身也是有內存地址來保存這個變量的。

2.為什么要使用指針

在C語言中,指針的使用非常廣泛,因為使用指針往往可以生成更高效、更緊湊的代碼。總的來說,使用指針有如下好處:

1)指針的使用使得不同區域的代碼可以輕易的共享內存數據,這樣可以使程序更為快速高效;

2)C語言中一些復雜的數據結構往往需要使用指針來構建,如鏈表、二叉樹等;

3)C語言是傳值調用,而有些操作傳值調用是無法完成的,如通過被調函數修改調用函數的對象,但是這種操作可以由指針來完成,而且并不違背傳值調用。

3.指針定義和初始化

下面我們再來看看下面例子:

int a = 100;

int *p = &a;

int **p2 = &p1;

p2? ? ? ? p1? ? ? ?a

&p1? ?->? &a? ?->? 100

為了方便理解,我們來打個比喻:

定義的a,p,p2都是一個盒子,他們都有自己地址空間,方便別人找到它

a是一個盒子,用來裝100這個數據,a本身有地址;

p也是一個盒子,用來裝a的地址,p本身也有地址;

P2也是一個盒子,用來裝p的地址,p2本身也有地址;

a和p和p2變量本身都是代表盒子里面的東西

=》盒子里面裝可能是值,也可能是地址,例如a就是值,p和p2都是地址;

“*”的操作(只對指針變量),就是取出盒子里面地址,去打開另一個盒子那東西

=》相當于,從抽底里面取出一把鑰匙,去打開另一個抽底去拿東西一樣。

指針的聲明比普通變量的聲明多了一個一元運算符 “*”。運算符 “*” 是間接尋址或者間接引用運算符

總結如下:

3.1.指針也是一種數據類型,也占用內存空間

1) 指針是用來干嘛?

=>指針是用來存放地址的, 這個地址(p=&a)可以指向"int"型內存空間

例如定義:int a;//我們知道a是用來存儲整型數據的

例如再定義int *p;? //那么,指針也是一種數據類型,也可以用來定義變量

2)指針本身也有地址,也占用內存空間

=>指針定義時(int *p)不占用內存空間,當其賦值(p=&a)時分配內存空間

3.2.一級指針: p 和 *p區別

"p"操作:

其實就是直接取出它內存空間里面值(只不過指針變量p存儲空間存放的是一個地址);

"*p"操作:

第一步,p操作,先去取出p存儲空間里面的地址(p存儲的是一個地址);?

第二步,*P操作,再把這塊地址里面值取出來;

3.3.二級指針: p2 和 *p2 和 **p2操作順序

第一步: p2, p2操作,先取出p2內存空間里面值,得到的這個值是一級指針的地址;

第二步: *p2, 再*p2操作, 取出一級指針內存空間里面的值(一級指針內存空間里面的值還是個地址,例如變量a地址);?

第三步:**p2, 再**p2操作, 得到變量a的值;

#include "iostream"using namespace std;void main(){ int a = 100; int *p = &a; int **p2 = &p; //int ***p3 = &p2; //1.取值, 打印 printf("取值, 打印:%d, %d, %d\n", a, *p, **p2); //2.取地址, 打印 =>指針也是有地址的 printf("取地址, 打印:&a=%#x, &p1=%#x, &p2=%#x\n",&a, &p, &p2); //3.打印地址,對比 //=>p 和 &a打印都是同樣地址,因為p是用來存放a的地址 printf("打印地址,對比:p=%#x, &a=%#x\n", p, &a); //p2 和 &p打印都是同樣地址,因為p2用來存儲&p地址 //=>*p2 和 &a打印都是同樣地址,因為*p2取就是p存儲單元里面值(即使a地址) printf("打印地址,對比:p2=%#x, &p=%#x ,*p2=%#x, &a=%#x\n", p2, &p, *p2, &a); system("pause"); return;}

最后輸出結果:

推薦閱讀:

專輯|C++專輯

專輯|Camera專業知識

專輯|攝像頭行業動態

專輯|程序人生

總結

以上是生活随笔為你收集整理的共享内存 传一个类指针_C++指针的全部內容,希望文章能夠幫你解決所遇到的問題。

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