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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

C++总结笔记(二)——指针

發(fā)布時(shí)間:2023/12/10 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++总结笔记(二)——指针 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、概念

1.1 指針的原理

找到一個(gè)比較精練的概述指針原理的句子:
指針變量就是在內(nèi)存中保存變量的地址,然后通過地址來訪問數(shù)據(jù)。

int a = 1; int* p = &a; cout << p << endl; 009DFEB4

可以知道變量p在內(nèi)存中的值就是a的地址,地址一般是16進(jìn)制數(shù)。
然后我們可以通過解引用的方式來輸出a的值。所謂解引用,就是通過指針的值即a的地址來找到a的值,具體方法就是在指針變量前加*。

cout << *p << endl;

可以知道,*p的值為1。

1.2 常量修飾指針

常量修飾指針分為常量指針、指針常量、常量指針和指針常量疊加。

1.2.1常量指針

常量指針通過const關(guān)鍵字修飾指針。
它的特點(diǎn)是指針變量指向的值不可以進(jìn)行修改,但指向可以修改。

int a = 1; int b = 2; const int* p = &a; *p = 2;//錯(cuò)誤 p = &b;//正確 cout << *p << endl;

可以知道,*p的值為2。

1.2.2指針常量

指針常量是通過const來修飾指針變量p。
它的特點(diǎn)是指向的值可以進(jìn)行修改,但指向不可以修改。

int a = 1; int b = 2;int* const p = &a; cout << *p << endl; cout << p << endl; //p = &b;錯(cuò)誤 *p = 2;//正確 cout << *p << endl; cout << p << endl; 1 0102FBE0 2 0102FBE0

可以看到,指針的值即指向的地址沒有改變,其指向的值發(fā)生變化。

1.2.3常量指針和指針常量疊加

那const也可以既修飾指針又修飾指針變量的值,那么指向的值不可以進(jìn)行修改,指向即地址也不可以修改。

const int* const p = &a;

其實(shí)簡(jiǎn)單的總結(jié):const后面的值不能發(fā)生改變。

1.3 野指針

野指針是指指向非法的內(nèi)存空間的指針。
1.指定義指針時(shí)未做初始化,因而不明確所指向的位置。

int * c = (int*)0x1234;//給指針自定義地址名,沒有初始化,會(huì)變成野指針 int* d;//沒有初始化,也為野指針

2.指new賦值的指針釋放后沒有歸NULL

int* e = new int(1);cout << *e << endl;//只有指針b是正常的,現(xiàn)在將b釋放,也會(huì)發(fā)生報(bào)錯(cuò)if(e != NULL){delete e;//此時(shí)e為野指針,需要將e置為NULLe = NULL;}

3.指針操作超越了作用域

1.4 this指針

C++中this指針指向的是被調(diào)用的成員函數(shù)所屬的對(duì)象。

class Person { public:Person(int age){this->age = age;}int age; };

1.5 空指針

是指指針指向內(nèi)存編號(hào)為0的空間,相當(dāng)于初始化,不可以訪問。

int *p = NULL;

二、程序應(yīng)用

2.1 在數(shù)組中應(yīng)用指針

2.1.1 一維數(shù)組

我們發(fā)現(xiàn)數(shù)組的變量名其實(shí)就是地址,所以不需要用&來取地址。

int a[3] = {1, 2, 3};int* p = a;//p表示數(shù)組a中第一個(gè)元素的地址,p[0]則表示地址中的值即1。cout<<a<<endl;cout<<p[0]<<endl;for (int i = 0; i < 3; i++){cout << *p << endl;p++;//++相當(dāng)于從首地址依次加4個(gè)字節(jié)到下一個(gè)數(shù)組元素的地址}

2.1.2 二維數(shù)組

int a[3][3] = { {1,2,3},{4,5,6},{7,8,9} }; cout << a << endl; int* p = a[0];//指向第0行。 int* p1 = a;//錯(cuò)誤,二維數(shù)組的數(shù)組名表示的是第一個(gè)元素的地址,第一個(gè)元素是值數(shù)組的第0行, 所以不能指向整行,只能指向整行的元素。 cout << *p << endl;//也表示0行的第一個(gè)元素。 cout << p[0] << endl;//表示0行的第一個(gè)元素。 00B1FA0C 1 1 3

2.2 在函數(shù)中應(yīng)用指針

int delete_1(int* p1, int* p2) {int temp = *p1;*p1 = *p2;*p2 = temp;return *p1 - *p2; } int main() {int a = 1;int b = 2;int c = delete_1(&a, &b);cout << a << endl;cout << b << endl;cout << c << endl; } 2 1 1

與值傳遞不同,指針傳遞可以通過改變內(nèi)存中的值的方法來改變實(shí)參。

2.3 實(shí)現(xiàn)冒泡排序

void Sort(int* p, int len) {//實(shí)現(xiàn)冒泡排序for (int i = 0; i < len - 1; i++){for (int j = 0; j < len - i - 1; j++){if (p[j] > p[j + 1]){int temp = p[j];p[j] = p[j + 1];p[j + 1] = temp;}} } //交換int var = p[0];p[0] = p[2];p[2] = var;//輸出for (int k = 0; k < len; k++){cout << p[k];} } int main() {int a[5] = {13, 1, 2, 5, 14};int len = sizeof(a) / sizeof(a[0]);Sort(a, len); } 5211314

總結(jié)

以上是生活随笔為你收集整理的C++总结笔记(二)——指针的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。