arrayPointer
1,分別使用指針加減
int wages[2] = {100000000,20000000};
int *pw = wages or int *pw = &wages[0] 表示指針指向數組的首地址;
pw表示地址,*pw表示取值,new分配的動態數組時 指針名稱當數組名稱使用eg pw[0],pw[2]分別表示指向數組wages的2個數組的元素值;
我們已知pw表示此指針所指向的數組的首地址元素在內存中的地址,pw + 1則表示指針的指向從指向數組的首地址轉義到數組的第二個元素;
此時經過pw = pw + 1后 pw表示的就是此指針所指向數組的第二個地址了,*pw取到的值就是數組的第二個值了;
在常規變量指針變量場合中取數組的值可以用數組名下標,也可以使用*指針名來取值;
但是在new動態數組中只能通過指針名
pw[0] or pw[1];
同時在常規變量中數組位置也是可以的*wages;
數組名解析為數組的首地址
指針默認都是指向數組的首地址,可以定義指針指向數組的位置
eg int *pw = &wages[1] or &wages[2];
wages = &wages[0] //first address elements;
注,將指針變量+ 1后,其增加的值等于指向的類型占用的字節數;
wages[0] Pk *wages;
wages[1] Pk *(wages + 1);arrayName[i] becomes *(arrayName + i);
pointerName[i] becomes *(pointerName + i)
數組名,指針名 都可以表示數組地址,但指針名值可改變,數組名值及所代表的地址值不可變更,--數組名? 常量;
pointerName = pointerName + 1執行下一個數組的元素內存地址;
arrayName = arrayName + 1; //not allow;
->用于指針結構體中;
pw 指針變量? 加減,移動指針所指的數組元素位置;
數組名通常被解析為數組的首地址,但請注意,當對數組名應用地址運算符時,得到的是整個數組的地址
但是又請注意了,數組名 = 數組的首地址 = 整個數組的地址;
但又請您注意了,tell &tell內存地址值一樣,但在內存中所占存儲空間是不一樣的
變量類型(類型占內存字節大小)
這個你應該懂的!移動整個 數據塊單元;
處理new數組,把指針當數組名對待;
double * pn; pn是指針,double *是指向pn的指針;
指針存儲的內存的地址,對變量名應用&運算符,來獲得被命名的內存的地址,new運算符返回未命名的內存的地址;
double * pn // pn can point to a double value
double * pa; //so can
char * pc; //pc can point to a char value
double bubble = 3.2;
pn = &bubble;//assign address of bubble to pn
pc = new char; //assign address of newly allocated char memory to
pa = new double[30] //
指針解除引用
對指針解除引用 意味著獲取指針指向的值(*pw),對指針應用解除引用或間接值運算符(*)來解除引用;
指針解除引用的另一種方法就是使用數組表示法 pn[0] *pn
絕不要對未被初始化為適當地址的指針解除引用;
指針算術(pw = pw + 1,值移動單位長度的指針指向跨度,此跨度是指指針所指向的數據類型所占內存的字節數)
指針和整數相加減
原來的地址值加上指向的對象占用的總字節數 但2個指針指向同一個數組時,指針間也是可以加減的;
int tacos[10] = {5,2,8,4,1,2,2,4,6,8};
int * pt = tacos; //suppose pt and taos are the address 3000
pt = pt + 1;
int * pe = &tacos[9]; // pe os
pe = pe - 1;
int diff = pe - pt;
數組的動態聯編(dynatic build)和靜態聯編(static build)
使用數組申明來創建數組,將采用靜態聯編,數組 的長度編譯是設置
new[]運算符創建數組,采用動態聯編,即程序運行時為數組分配存儲空間,設定元素個數;
但當使用完 new[]申明生成的數組后,需用delete [] typeName刪除,不然造成內存泄露
(指操作過后不經過特定手法無法恢復);
int size;
cin>>size;
const int size = 10;
int * pz = new int [size]; //dynamic binding,size set at run time
delete [] pz; //free memory when finshed;
數組表示法和指針表示法
方括號數組表示法等同于對指針解除引用;
tacos[0] means *tacos the value at address tacos
tacos[3] means *(tacos + 3)? 等價于 tacoks = tacos + 3; //means the value at address tacos + 3
int * pt = new int [10];//pt points to block of 10 ints
*pt = 5; //set element number 0 to 5
pt[0] = 6;//reset element number 0 to 6
pt[9] = 44; //set tenth element (element number 9) to 44
int coats[10];
*(coats + 4) = 12; //set coats[4] to 12 相當于設置數組的第四個元素值
*ArrayName;
*PointerName;
*(ArrayName + n) 移動到相應的元素處;
數組初始化 整數 or 字符串
可以{} or ""但是僅僅用于字符串
{} 僅僅只可以用到數字上
數據類型 ,變量 占內字節數
strlen 字符串變量的長度
strlen(pw);
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的arrayPointer的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS 停留几秒后返回上一页
- 下一篇: audio 标签简介