您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“C++中的指針怎么定義和使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“C++中的指針怎么定義和使用”吧!
作用:可以通過指針間接訪問內(nèi)存。
內(nèi)存編號是從0開始記錄的,一般用十六進制數(shù)字表示??梢岳弥羔樧兞勘4娴刂?。
指針變量定義語法:
數(shù)據(jù)類型* 變量名; &可以取地址;*可以取地址存放的值
示例:
#include<iostream> using namespace std; int main() { int a = 10; //1.指針定義的語法:數(shù)據(jù)類型 * 指針變量名; int* p; //int* 定義一個指向整數(shù)型的指針變量 p = &a; cout << "a的地址是:" << &a << endl; cout << "指針p是:" << p << endl; //2.使用指針,可以通過解引用的方式來找到指針指向的內(nèi)存 //指針變量前加* 代表解引用,就是找到一個地址內(nèi)存中存放的數(shù)據(jù) *p = 100; cout << "a = " << a << endl; cout << "*p = " << *p << endl; system("pause"); return 0; }
指針也是種數(shù)據(jù)類型,所以指針也是占內(nèi)存的
32位操作空間下,占用4個字節(jié)。
64位操作空間下,占用8個字節(jié)。
#include<iostream> using namespace std; int main() { int a = 10; int* p = &a; cout << "sizeof(int*)=" << sizeof(int*) << endl; cout << "sizeof(float*)=" << sizeof(float*) << endl; cout << "sizeof(double*)=" << sizeof(double*) << endl; cout << "sizeof(char*)=" << sizeof(char*) << endl; cout << "sizeof(string*)=" << sizeof(string*) << endl; system("pause"); return 0; }
可以改變上面的x86(32位)和x64(64位),查看輸出結(jié)果。
空指針:指針變量指向內(nèi)存中編號為0的空間
用途:初始化指針變量
注意:指針變量指向的內(nèi)存是不可以訪問的
示例:
#include<iostream> using namespace std; int main() { //1空指針用于給指針變量初始化. int* p = NULL; //就是0 //空指針是不可以進行訪問的 //0-255之間的內(nèi)存編號是系統(tǒng)占用的,因此不可以訪問 *p = 100; //因為這里不可以訪問,所以程序直接退出了,后面的代碼不再執(zhí)行。 cout << p << *p << endl; system("pause"); return 0; }
野指針:指針變量指向非法的內(nèi)存空間
示例:
#include<iostream> using namespace std; int main() { //野指針 int* p = (int*)0x1100; //這里定義的這個地址就是不屬于我們當(dāng)前地址空間的地址,就是越界了,也無法訪問,所以程序會自動退出。 cout << *p << endl; system("pause"); return 0; }
const修飾指針有三種情況:
1.常量指針:指向常量的指針
2.指針常量:指針類型的常量
3.指向常量的指針常量:一個是本身就是常量的指針指向了一個常量。
const int* p = &a; ---常量指針 特點:指針的指向可以修改,但是指針指向的值不可以修改。 (幫助理解:從右向左看,const在最后起固定作用,固定了*p的值,但是沒有固定p的指向,即使改變了p的指向,*p也是不可更改的。) int* const p = &a; ---常量指針 特點:指針的指向不可以修改,但是指針指向的值可以修改。 (幫助理解:從右向左看,const在p獲得地址后起固定作用,固定了p的指向,但是沒有固定*p的值) const int* const p = &a; 特點:指針的指向和指針指向的值都不可以修改。
示例:
#include<iostream> using namespace std; int main() { int a = 10, b = 20; //常量指針 const int* p = &a; //*p = 10;錯誤,指向的值不可修改 p = &b; //指向可以修改 //*p = 30;即使指向改變,指向的值也是不可修改的。 cout << *p << endl; //指針常量 int* const p2 = &a; //p2 = &b;錯誤,指向不可修改 *p2 = 100;//指向的值可以修改 cout << *p2 << endl; //指向常量的指針常量 const int* const p3 = &a; //p3 = &b;錯誤,指向不可修改 //*p3 = 100;錯誤,指向的值不可修改 system("pause"); return 0; }
作用:利用指針訪問數(shù)組中元素
示例:
#include<iostream> using namespace std; int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; cout << "第一個元素為:" << arr[0] << endl; int* p = arr;//首地址賦予了指針變量p cout << p << endl; cout << "利用指針訪問第一個元素:" << *p << endl; p++;//指針+1是加一存儲單位,int型變量占4字節(jié),所以+4 cout << p << endl; cout << "利用指針訪問第二個元素:" << *p << endl; char brr[2] = { 'a','b' }; char* q = brr; cout << (int)q << endl; q++; //字符型變量占1個字節(jié),所以+1 cout << (int)q << endl; //利用指針遍歷數(shù)組 p = arr; for (int i = 0; i < 10; i++) { cout << *p << endl; p++; } system("pause"); return 0; }
作用:利用指針作函數(shù)參數(shù),可以修改實參的值。
對比值傳遞,值傳遞是為形參另開辟一段內(nèi)存進行運算;
而指針傳遞則是傳遞地址,通過對地址訪問,就可以直接對實參做出改變。
#include<iostream> using namespace std; void swap01(int a, int b) //值傳遞 { int temp = a; a = b; b = temp; cout << "a = " << a << endl; cout << "b = " << b << endl; } void swap02(int* p1, int* p2) { int temp = *p1; *p1 = *p2; *p2 = temp; } int main() { int a = 10, b = 20; swap01(a, b); cout << "a = " << a << endl; cout << "b = " << b << endl; swap02(&a, &b); cout << "a = " << a << endl; cout << "b = " << b << endl; system("pause"); return 0; }
案例:封裝一個函數(shù),利用冒泡排序,實現(xiàn)對整型數(shù)組的升序排序
例如數(shù)組,int arr[10]={4,3,6,9,1,2,10,8,7,5} ;
#include<iostream> using namespace std; void coutarr(int* arr,int len) { for (int i = 0; i < len; i++) { cout << arr[i] << " "; } cout << endl; } void bubbleSort(int* arr, int len) //值傳遞 { for (int i = 0; i < len; i++) { for (int j = 0; j + i < len - 1; j++) { if (arr[j] > arr[j+1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } int main() { int arr[10] = { 4,3,6,9,1,2,10,8,7,5 }; int len = sizeof(arr) / sizeof(arr[0]); cout << "排序前的數(shù)組為:" << endl; coutarr(arr, len); bubbleSort(arr, len); cout << "排序后的數(shù)組為:" << endl; coutarr(arr, len); system("pause"); return 0; }
到此,相信大家對“C++中的指針怎么定義和使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。