arrayPointer
1,分別使用指針加減
int wages[2] = {100000000,20000000};
int *pw = wages or int *pw = &wages[0] 表示指針指向數(shù)組的首地址;
pw表示地址,*pw表示取值,new分配的動(dòng)態(tài)數(shù)組時(shí) 指針名稱當(dāng)數(shù)組名稱使用eg pw[0],pw[2]分別表示指向數(shù)組wages的2個(gè)數(shù)組的元素值;
我們已知pw表示此指針?biāo)赶虻臄?shù)組的首地址元素在內(nèi)存中的地址,pw + 1則表示指針的指向從指向數(shù)組的首地址轉(zhuǎn)義到數(shù)組的第二個(gè)元素;
此時(shí)經(jīng)過pw = pw + 1后 pw表示的就是此指針?biāo)赶驍?shù)組的第二個(gè)地址了,*pw取到的值就是數(shù)組的第二個(gè)值了;
在常規(guī)變量指針變量場(chǎng)合中取數(shù)組的值可以用數(shù)組名下標(biāo),也可以使用*指針名來取值;
但是在new動(dòng)態(tài)數(shù)組中只能通過指針名
pw[0] or pw[1];
同時(shí)在常規(guī)變量中數(shù)組位置也是可以的*wages;
數(shù)組名解析為數(shù)組的首地址
指針默認(rèn)都是指向數(shù)組的首地址,可以定義指針指向數(shù)組的位置
eg int *pw = &wages[1] or &wages[2];
wages = &wages[0] //first address elements;
注,將指針變量+ 1后,其增加的值等于指向的類型占用的字節(jié)數(shù);
wages[0] Pk *wages;
wages[1] Pk *(wages + 1);arrayName[i] becomes *(arrayName + i);
pointerName[i] becomes *(pointerName + i)
數(shù)組名,指針名 都可以表示數(shù)組地址,但指針名值可改變,數(shù)組名值及所代表的地址值不可變更,--數(shù)組名? 常量;
pointerName = pointerName + 1執(zhí)行下一個(gè)數(shù)組的元素內(nèi)存地址;
arrayName = arrayName + 1; //not allow;
->用于指針結(jié)構(gòu)體中;
pw 指針變量? 加減,移動(dòng)指針?biāo)傅臄?shù)組元素位置;
數(shù)組名通常被解析為數(shù)組的首地址,但請(qǐng)注意,當(dāng)對(duì)數(shù)組名應(yīng)用地址運(yùn)算符時(shí),得到的是整個(gè)數(shù)組的地址
但是又請(qǐng)注意了,數(shù)組名 = 數(shù)組的首地址 = 整個(gè)數(shù)組的地址;
但又請(qǐng)您注意了,tell &tell內(nèi)存地址值一樣,但在內(nèi)存中所占存儲(chǔ)空間是不一樣的
變量類型(類型占內(nèi)存字節(jié)大小)
這個(gè)你應(yīng)該懂的!移動(dòng)整個(gè) 數(shù)據(jù)塊單元;
處理new數(shù)組,把指針當(dāng)數(shù)組名對(duì)待;
double * pn; pn是指針,double *是指向pn的指針;
指針存儲(chǔ)的內(nèi)存的地址,對(duì)變量名應(yīng)用&運(yùn)算符,來獲得被命名的內(nèi)存的地址,new運(yùn)算符返回未命名的內(nèi)存的地址;
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] //
指針解除引用
對(duì)指針解除引用 意味著獲取指針指向的值(*pw),對(duì)指針應(yīng)用解除引用或間接值運(yùn)算符(*)來解除引用;
指針解除引用的另一種方法就是使用數(shù)組表示法 pn[0] *pn
絕不要對(duì)未被初始化為適當(dāng)?shù)刂返闹羔樈獬?
指針?biāo)阈g(shù)(pw = pw + 1,值移動(dòng)單位長度的指針指向跨度,此跨度是指指針?biāo)赶虻臄?shù)據(jù)類型所占內(nèi)存的字節(jié)數(shù))
指針和整數(shù)相加減
原來的地址值加上指向的對(duì)象占用的總字節(jié)數(shù) 但2個(gè)指針指向同一個(gè)數(shù)組時(shí),指針間也是可以加減的;
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;
數(shù)組的動(dòng)態(tài)聯(lián)編(dynatic build)和靜態(tài)聯(lián)編(static build)
使用數(shù)組申明來創(chuàng)建數(shù)組,將采用靜態(tài)聯(lián)編,數(shù)組 的長度編譯是設(shè)置
new[]運(yùn)算符創(chuàng)建數(shù)組,采用動(dòng)態(tài)聯(lián)編,即程序運(yùn)行時(shí)為數(shù)組分配存儲(chǔ)空間,設(shè)定元素個(gè)數(shù);
但當(dāng)使用完 new[]申明生成的數(shù)組后,需用delete [] typeName刪除,不然造成內(nèi)存泄露
(指操作過后不經(jīng)過特定手法無法恢復(fù));
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;
數(shù)組表示法和指針表示法
方括號(hào)數(shù)組表示法等同于對(duì)指針解除引用;
tacos[0] means *tacos the value at address tacos
tacos[3] means *(tacos + 3)? 等價(jià)于 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 相當(dāng)于設(shè)置數(shù)組的第四個(gè)元素值
*ArrayName;
*PointerName;
*(ArrayName + n) 移動(dòng)到相應(yīng)的元素處;
數(shù)組初始化 整數(shù) or 字符串
可以{} or ""但是僅僅用于字符串
{} 僅僅只可以用到數(shù)字上
數(shù)據(jù)類型 ,變量 占內(nèi)字節(jié)數(shù)
strlen 字符串變量的長度
strlen(pw);
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的arrayPointer的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS 停留几秒后返回上一页
- 下一篇: audio 标签简介