一級指針*p和p的區(qū)別以及如何定義指針首先理解一個語句
i_pointer=&i; *i_pointer表達的是指針?biāo)傅膶ο缶褪悄爿斎雐變量的數(shù)值。 i_pointer有一個具體的值,這個值就是地址也就是&i… 那么如何定義指針呢? 再看一個語句 int *pointer_1,*pointer_2;
就是定義了兩個指針 可見,雖然這里也用到了*的符號,但他表示的并不是上面所說的表示變量的數(shù)值。 所以:int *pointer_1 中的pointer_1 為指針變量 而i_pointer 為指針 區(qū)分好指針變量和指針的區(qū)別
大概的理解就是,指針變量他是一個變化的指針,你可以把指針理解為門牌號,指針內(nèi)容理解為門里面的內(nèi)容。 而上面所說的指針變量就是一個變化的門牌號 同樣的char *pointer_1 也可以表示一個指針,但是這個叫做指針變量的基類型 基類型表示的是可以指向變量的類型,比如說,你想找一個指針指向數(shù)字和字符是不一樣的。
指針和數(shù)組之間的關(guān)系我們先理解一下下面三句話 int *p;
p=&a[0];
p=a;
上面的效果是完全一樣的。 為什么呢? 首先,第二行的意思是a[0]表達的是一個數(shù)字,那么對他取地址然后賦值給p 第三行的意思是,a這個數(shù)組的第一個元素的地址賦值給a 所以我們可以總結(jié)得 已知一個數(shù)組a[n],a代表的就是這個數(shù)組第一個元素所對應(yīng)的地址
那么我們?nèi)绾瓮ㄟ^指針來引用數(shù)組的元素呢? 上面我們說到 int *p;
p=&a[0];
p=a;
我們?nèi)绻麑 1其實就是a[1]這個元素的地址 引用的話就直接用*解運算符來得到指針對應(yīng)的內(nèi)容 *(p i);
這個就是引用數(shù)組的內(nèi)容。 數(shù)組名和函數(shù)參數(shù)首先看一下這個語句 void(int arr[],int n);
fun(arrar,10)
還記得上面是怎么用指針做函數(shù)參數(shù)的么? void swap(int *p1,int &p2);
swap(p1,p2);
是不是覺得兩個其實非常像? 沒錯! 我們可以看到。 在定義函數(shù)的時候,括號里面都是指針變量 在用函數(shù)的時候,都是把指針放進去
但其實程序在編譯的時候,是將arr指針當(dāng)作變量來處理其實就是 void(int arr[],int n);
等價于
void fun(int *arr,int n);
由int arr[]==int *arr,我們可以得出一個結(jié)論 數(shù)組的本質(zhì)就是一個指針(在計算機處理數(shù)組的時候)
指針和多維數(shù)組的關(guān)系我們先看一個二維數(shù)組 int a[3][4]={
{1,3,5,7}
{9,11,13,15}
{17,19,21,23}
};
1 3 5 7 9 11 13 15 17 19 21 23 從二維數(shù)組來看a代表的是二維數(shù)組首元素的地址 但是現(xiàn)在的首元素不是一個簡單的整型元素 而是一個由4個整形元素所組成的一維數(shù)組。 所以a代表的是首行(即序號為0的行的)首地址。
表達形式 | 含義 | 地址 |
---|
a | 二維數(shù)組的組名,第0行的首地址 | 2000 | a 1,&a[1] | 第一行的首地址 | 2000 | a[0],*(a 0),*a | 0行0列的元素的地址 | 2016 | a[1],*a 1 | 第1行第0列的地址 | 2016 | a[1] 2,* (a 1) 2,&a[1][2] | 第1行第2列的地址 | 2021 | * (a[1] 2),* (*(a 1) 2),a[1][2] | 第1行第2列的數(shù)值 | 元素值為13 |
還有一個東西你要注意的是,一個int型的指針變量,相差一個位置,就是加4,但是現(xiàn)在這個地方,一行有四個元素,所以相差了16
–end of the article– 明天早上再把結(jié)構(gòu)體還有多重指針總結(jié)一下 來源:https://www./content-4-296101.html
|