/*
動態數組:
*/
#include<iostream>
using namespace std;
int main() {
// new 是在堆內存裏面的,如果不 delete ,除非程序崩潰或者程序退出,否則內存一直佔用
// new -> delete
// new[] -> delete[]
// 放在棧中
int number_arr[10];
number_arr[0] = 0;
// 放在堆中
int* arr_p = new int[10];
arr_p[0] = 0;
arr_p[1] = 1;
arr_p[2] = 2;
arr_p[3] = 3;
// 對指針可以進行的基本操作
// 1. [0] 獲取 0 位置
// 2. + 操作,可以間接操作指針上的數據,(我覺得應該是地址位置向後移動)
*(arr_p + 1) = 11;
cout << "arr_p[0]: " << arr_p[0] << endl;
cout << "arr_p[1]: " << arr_p[1] << endl;
cout << "arr_p[2]: " << arr_p[2] << endl;
cout << "arr_p[3]: " << arr_p[3] << endl;
cout << "arr_p[4]: " << arr_p[4] << endl;
delete[] arr_p;
return 0;
}
->
xaye@orange:~/code/dev/12$ ./a.out
arr_p[0]: 0
arr_p[1]: 11
arr_p[2]: 2
arr_p[3]: 3
arr_p[4]: 0
/*
動態數組:
*/
#include<iostream>
using namespace std;
int main() {
// new 是在堆內存裏面的,如果不 delete ,除非程序崩潰或者程序退出,否則內存一直佔用
// new -> delete
// new[] -> delete[]
// 放在棧中
int number_arr[10];
number_arr[0] = 0;
// 放在堆中
int* arr_p = new int[10];
arr_p[0] = 0;
arr_p[1] = 1;
arr_p[2] = 2;
arr_p[3] = 3;
// 對指針可以進行的基本操作
// 1. [0] 獲取 0 位置
// 2. + 操作,可以間接操作指針上的數據,(我覺得應該是地址位置向後移動)
arr_p = arr_p + 1;
*arr_p = 11;
// *arr_p = arr_p + 1
// *arr_p = 22;
// arr_p[0] = arr_p;
// arr_p[1] = arr_p + 1;
// arr_p[2] = arr_p + 2;
// 這樣操作會崩潰
cout << "arr_p[0]: " << arr_p[0] << endl;
cout << "arr_p[1]: " << arr_p[1] << endl;
cout << "arr_p[2]: " << arr_p[2] << endl;
cout << "arr_p[3]: " << arr_p[3] << endl;
//cout << "arr_p[4]: " << arr_p[4] << endl;
delete[] arr_p;
return 0;
}
xaye@orange:~/code/dev/12$ ./a.out
arr_p[0]: 11
arr_p[1]: 2
arr_p[2]: 3
arr_p[3]: 0
free(): invalid pointer
已中止 (核心已轉儲)
注意:arr_p = arr_p + 1; 是將首地址向後移動一位, *arr_p就是給第一個元素賦值操作,所以 arr_p[0] 輸出是 11
/*
從計算機電路來理解指針
類比法理解:變量就是我的名字,指針就是我的住址,引用就是我的別名,二級指針是住址的住址,三級指針那就是住址的住址的住址,再往後以此往下類推。
從計算機本質上理解:在計算機看來,變量、指針、住址、別名等等這些,都是不存在的,唯一存在的就是內存高低電壓(地址)。接下來,我們試着從計算機電路的
角度來理解指針。 JavaOC->C/C++->彙編->CPU的運行原理->數字電路(門電路)
代碼 -> 編譯鏈接 -> elf可執行文件(彙編代碼->機器碼指令)
*/
#include<iostream>
using namespace std;
int main() {
//定義變量
int number =1;
//獲取指針
int* p_number = &number;
//通過指針操作變量賦值
*p_number=2;
cout << "number =" << number << endl;
return 0;
}
實時查看源代碼對應的彙編輸出:https://godbolt.org/