先通過一組例項來了解一下,會更加形象。
#includeusing namespace std;
int main()
; for(int i=0;i<5;i++)
cout<<" &a:"<<&a<<'\n';
cout<<" a:"《輸出結果為:
a[0]的位址為:0x70fdf0
a[1]的位址為:0x70fdf4
a[2]的位址為:0x70fdf8
a[3]的位址為:0x70fdfc
a[4]的位址為:0x70fe00
&a:0x70fdf0
a:0x70fdf0
&a[0]:0x70fdf0
a[0]:1
通過比較可以看出,在數值上a,&a,&a[0]是相等的 ,但還是有區別的,要清楚它們各表示什麼,才能更好的理解後面的知識
下面這個和上面的要區別一下,因為說法很相似,重點放在書寫形式上,這樣會更好理解
而a[0]表示陣列的首元素 ,相同a=2;這和普通陣列一樣;
舉個栗子,更容易理解;
int (*p)[5];根據符號優先順序 () > > * ,所以先看()內的,而()裡面是指標,*和p構成指標的定義,int修飾構成陣列的定義,陣列在這裡並沒有實際的變數名,可以看成是乙個有虛擬的變數名 ;所以就表示定義了乙個指標p指向乙個含有5個元素的一維陣列(即陣列指標)通俗的講:這個陣列裡面儲存的元素都是位址,位址,位址,
#include#include//呼叫setw()函式要用到此函式庫,下面會詳細解釋的
using namespace std;
int main()
,(*p1)[3]=&a,*p2;//定義了乙個一維陣列a,乙個指向陣列a的指標p1,乙個野指標(不知道指向**)
p2=&a[2];//把a[2]的位址賦p2
cout//int *p[3];//的優先順序必*高,p與結合構成乙個陣列的定義,陣列名為p
//int *修飾的是陣列p的內容,即陣列的每個元素(p[0],p[1],p[2])都是指標
執行結果為:
p1:0x70fdf0
*p1:0x70fdf0
p2:0x70fdf8
*p2:4
訪問一維陣列:
#includeusing namespace std;
int main()
; int (*p)[3]=&a; //這是陣列指標,別看用了&,但是*p還是位址
cout<<"a:或&a[0]:"《執行結果:
為什麼p+1比&a大呢,後面再做解釋
重點理解指標指向的是誰
includeusing namespace std;
int main(), ,
};
int (*p1d)[2]=b; //也可以寫成(*p1d)[2]=&b[0],p1d為陣列指標 ,指向首元素b[0]
cout<<"p1d:"《我所要講的都在注釋**的注釋裡面,看**,看注釋,然後自己執行**
以下給出乙個三維陣列c
#includeusing namespace std;
int main();
//空間立體來的,不太好表示,這裡我就直接賦值了
cout<<"先來看第乙個元素: "《執行結果: 先來看第乙個元素:
&c 0x70fe00
c[0]:0x70fe00=c[0][0]:0x70fe00
&c[0][0][0]:0x70fe00
現在看第二個元素:
0x70fe00=0x70fe10=0x70fe10
0x70fe10
簡單分析下,c[x][y][z]就是長方體一樣,c[0][0][0]=1但是c[0][0]卻表示位址,就跟一維陣列一樣,int a=;
a=1,但是a卻表示位址一樣,和三維陣列的表示方法一樣,讀者可以自行聯想。
指標(初學者)
1 位址和指標的概念 1 位址 記憶體區的每乙個位元組都有乙個編號,這就是 位址 如果在程式中定義了乙個變數,在對程式進行編譯時,系統就會給這個變數分配記憶體單元。在c語言中,對變數的訪問有兩種方式 直接訪問和間接訪問。直接訪問 如 a 5 間接訪問 如 scanf d a 呼叫函式時,把變數a的位...
初學者談初學者學html
這是乙個段落。解釋一下就是 html 與 html 之間的文字是描述網頁。head 與 head 之間的文字是文件的元資料。title 與 之間的文字是文件的標題。body 與 body 之間的文字是可見的頁面內容,是文章的主體部分。h1 與 h1 之間的文字被顯示為乙個大標題。p 與 p 之間的文...
初學者理解C語言指標
1.指標定義 指標是由能存放乙個位址的一組儲存單元 通常是兩個或四個位元組 構成。c語言程式設計 指標是乙個值為記憶體位址的變數 或資料物件 正如char型別變數的值是字元,指標變數的值是位址。c primer plus 感覺第二種更容易理解,指標是變數 和char int類似。3.間接定址 間接引...