C++學習 2 指標
阿新 • • 發佈:2021-08-04
指標:指標儲存的是資料的地址;
#include<iostream> using namespace std; int main() { //1、定義指標 int a = 10; //指標定義的語法:資料型別 * 指標變數名; int * p; //讓指標記錄變數a的地址 p = &a; cout << "a的地址為:" << &a << endl; cout << "指標p為:" << p << endl; //2、使用指標//可以通過解引用的方式來找到指標指向的記憶體 //指標前加 * 代表解引用,找到指標指向的記憶體中的資料 *p = 1000; //解引用指標p,找到p裡的資料,並賦值1000 cout << "a=" << a << endl; cout << "*p=" << *p << endl; return 0; }
空指標:指標變數指向記憶體中編號為0的指標;
作用: 初始化指標變數;
注意: 空指標指向的記憶體是不可以訪問的。0~255之間的記憶體編號是系統佔用的,因此不可訪問;
野指標:指標變數指向非法的記憶體空間;在程式中,應儘量避免使用野指標;
const修飾指標:
const修飾指標有三種情況:(左定值,右定向 )
1、const修飾指標 --- 常量指標 const在指標左側,指標的值不可以修改,但指向可以修改。
eg: const int * p = &a;
*p = 20; // 錯誤,指標指向的值不可以修改
p = &b; //正確,指標的指向可以修改
2、const修飾常量 --- 指標常量 const在指標右側,指標的指向不可以修改,但值可以修改。
eg: int *const p = &a;
*p = 20; //正確,指標指向的值可以修改
p = &b; //錯誤,指標的指向不可以修改
3、const即修飾指標又修飾常量 指標的指向和指向的值都不可以改
eg: const int *constp = &a;
*p = 20; //錯誤,指標指向的值不可以修改
p = &b; //錯誤,指標的指向也不可以修改
指標和陣列
作用:利用指標訪問陣列中的元素
#include<iostream> using namespace std; int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; cout << "第一個元素:" << arr[0] << endl; int * p = arr; //指向陣列的指標,arr就是陣列首地址 cout << "指標訪問的第一個元素:" << *p << endl; p++; //指標向後偏移4個位元組 cout << "指標訪問的第二個元素:" << *p << endl; cout << "利用指標遍歷陣列" << endl; int * p2 = arr; for (int i = 0; i < 10; i++) { //cout << arr[i] << endl; cout << *p2 << endl; p2++; } system("pause"); return 0; }
指標和函式
#include<iostream> using namespace std; void swap01(int a , int b) //值傳遞 { int temp = a; a = b; b = temp; cout << "swap01 a=" << a << " " << "swap01 b=" << b << endl; //swap01 a=20,swap01 b=10形參發生改變 } void swap02(int * p1 , int * p2) //地址傳遞 { int temp = *p1; *p1 = *p2; *p2 = temp; cout << "swap02 a=" << *p1 << " " << "swap02 b=" << *p2 << endl; //swap02 a=20,swap02 b=10形參發生改變 } int main() { //指標和函式 int a = 10; int b = 20; //1、值傳遞 //swap01(a, b); //cout << "a=" << a <<" " << "b=" << b << endl; //值傳遞 a=10,b=20 實參不發生改變(不可修飾實參) //2、地址傳遞 swap02(&a, &b); cout << "a=" << a << " " << "b=" << b << endl; //地址傳遞 a=20,b=10 實參發生改變(可修飾實參) system("pause"); return 0; }