一维数组和指针的关系
?數組名是一個指針常量,表示數組第一個元素的的起始地址。
?如 int a[5];? a表示數組第一個元素a[0]的起始地址&a[0]。
?
一 引用數組元素的方法:
? ①用數組下標引用數組元素
數組a中元素用下標表示為:?
a[0]?a[1]?a[2]?a[3]?a[4]
? ②用指針引用數組元素
數組a中元素用下標表示為:
int *p = a;??
*p, *(p+1), *(p+2), *(p+3), *(p+4)
二 數組和指針的關系:
? ①既然p是指向數組第一個元素起始地址的指針,可以用*(p+i)表示數組中第i+1個元素,a也是指向數組第一個元素的指針啊,那么能不能用*(a+i)表示第i+1個元素呢?
可以的,可以用printf 打印?*(a+i)的值驗證
? ②反過來,a是指向數組第一個元素起始地址的指針,可以用a加數組下標引用數組元素,如a[3],p也是指向數組第一個元素起始地址的指針,能不能用p加數組下標引用數組元素?
也是可以的,可以用printf?打印?p[0], p[1]....的值驗證
PS: 由上得,數組名a和指針p是一樣的。實際上編譯時,數組元素a[i] 就是當作 *(a+i)去處理的,先通過數組名a找到數組的首地址,然后首地址 a+i 得到元素a[i]的地址,
再然后通過*(a+i)得到第i個元素的內容。
所以:數組的第i個元素直接寫成*(a+i)的形式直接取得值,效率不就提升了嗎。省去編譯器先通過數組名a找到數組的首地址,然后首地址 a+i 得到元素a[i]的地址,
再然后通過*(a+i)得到第i個元素的內容。
?
三 指向數組的指針的自增:
int a[5];
int *p = a;?
可以 ++p 遞增指針p指向下一個數組元素,然后用*p取得元素的值。
能不能用a++或者++a把指針指向下一個數組元素? 不能!!! 開頭就說過,數組名是指向數組首元素的指針常量。指針a是不可以指向其他元素的,只能指向首元素的起始地址。
?
?
四 數組指針做形參:
把數組從主調函數傳到被調函數時,我們可以傳數組的首地址和數組長度就可以,為什么不是傳遞數組呢?還是為了效率,下面用代碼說明:
void Output(char *p, int len);int main(){char str[] = "HelloWorld HelloWorld HelloWorld HelloWorld HelloWorld HelloWorld ";Output(str, strlen(str));system("pause");return 0;}void Output(char *p, int len){for (int i = 0; i < len; ++i){printf("%c", *(p + i));}}如上,如果我們Output函數不是用指針的方式char *p,而是用數組的方式char p[]的話,有什么不一樣?
我們定義的數組str有65字節,調用函數的話會傳遞這65字節的數組。
char *p指針大小是4字節,只需要傳遞4字節的數據就可以了,不止少傳遞數據,執行起來也更快了。
?
PS: 指針大小可以打印sizeof(int*),sizeof(char*)去驗證。
下面的例子也證明? ? ? ? ? ? ? ? ?pArr[3]=*(pArr + 3)
#include <stdio.h>//函數可以輸出一個一維數組的內容 void function(int * pArr,int length) {//*pArr;//*(pArr + 1); /*for (int i = 0; i<length; ++i){printf("%d ", *(pArr + i)); //*pArr}printf("\n"); */pArr[3] = 88;*(pArr + 3) = 88;int * arr= pArr;arr[5] = 60;printf("%d\n", arr[5]);}int main() {int a[5] = {1,2,3,4,5};int b[6] = {-1,-2,-3,-4,-5,-6};int c[100] = {1,99,22,33};//function(a,5); //a 是 int *//function(b, 6);//function(c, 100);printf("%d\n ", b[3]);function(b, 6);printf("%d\n ", b[3]);while (true){}return 0; }?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的一维数组和指针的关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Word2Vec学习笔记(三)
- 下一篇: zcmu2012(积性函数---因子和)