日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言之——指针数组与数组指针

發布時間:2024/1/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言之——指针数组与数组指针 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、指針數組和數組指針的定義

1. 指針數組:是指一個數組里面裝著指針,也即指針數組是一個數組;

定義形式:int *a[10];

說明:[]的優先級高于*,該定義形式應該理解為:int * (a[10]);括號里面說明a是一個數組,包含了10個元素,括號外面說明每個元素的類型為int *。

如圖所示:

2. 數組指針:是指一個指向數組的指針,它其實還是一個指針,只不過是指向數組而已;

定義形式:int (*p)[10]; 其中,由于[]的優先級高于*,所以必須添加(*p).

說明:括號中的*表明 p 是一個指針,該指針變量保存的是一個數組的首地址,它指向一整個數組(),數組的類型為int[10],這正是 a 所包含的每個一維數組的類型。

在32位系統下任何類型的指針所占內存大小都為4個字節,至于它指向的數組占多少字節,具體要看數組的大小。總之,數組指針即為“指向數組的大小”
?

總結:主要看后面的兩個字是什么(前面是修飾作用),因此指針數組是數組,而數組指針是指針。
?

二、指針數組和數組指針的使用

1. 指針數組的使用

(1)最簡單的使用方式:

#include <stdio.h> int main(){int a = 16, b = 932, c = 100;//定義一個指針數組int *arr[3] = {&a, &b, &c};//也可以不指定長度,直接寫作 int *arr[]//parr 是指向數組 arr 的指針,確切地說是指向 arr 第 0 個元素的指針,//它的定義形式應該理解為int *(*parr),括號中的*表示 parr 是一個指針,括號外面的int *表示 parr 指向的數據的類型。//arr 第 0 個元素的類型為 int *,所以在定義 parr 時要加兩個 *。int **parr = arr;printf("%d, %d, %d\n", *arr[0], *arr[1], *arr[2]);//16, 932, 100printf("%d, %d, %d\n", **(parr+0), **(parr+1), **(parr+2));//16, 932, 100return 0; }

?(2)對多個字符串進行處理:

#include <stdio.h> int main(){char *str[3] = {"c.biancheng.net","C語言中文網","C Language"};printf("%s\n%s\n%s\n", str[0], str[1], str[2]);/*運行結果:c.biancheng.netC語言中文網C Language*/return 0; }

解釋:str數組存儲了兩個指針,第一個指針指向了字符串"c.biancheng.net",第二個指針指向了字符串"C語言中文網",第三個指針指向了字符串"C Language"。需要注意的是,字符數組 str 中存放的是字符串的首地址,不是字符串本身,字符串本身位于其他的內存區域,和字符數組是分開的。

.

2.數組指針的使用

(1)對于一維數組:

int main(void) {char a[5]={'A','K','C','G','L'};?? ?char (*p)[5]=&a;//&a代表的是整個數組的首地址//char (*p)[5]=a;這樣是錯誤的,因為a代表第一個元素的首地址printf("%c %c %c",**p,*(*p+1),*(*p+3));//輸出:A K Greturn 0; }

說明:a代表的是第一個元素的地址,即:&a[0],而&a代表的是整個數組的地址a+1代表的是下一個元素的地址,即&a[1],而&a+1代表的是向后移動5個字節的地址。這里為什么用的二級指針呢?因為p=&a,*p即為第一個元素的地址,再**p即輸出了第一個元素。同理,*(*p+1),*(*p+3)輸出第二個元素,第四個元素。


(2)對于二維數組:

二維數組用行指針定義

p++操作會使p指向下一行的首地址,這是因為p是行指針,指向的是一行。我們可以用sizeof(*p)測試p指向的內容的大小:

#include <stdio.h> int main() {int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };int(*p)[4];//p指向數組 a 的開頭,也即第 0 行;p+1前進一行,指向第 1 行。int i,j;p=a;for(i=0; i<3; i++){for(j=0; j<4; j++) printf("%2d ",*(*(p+i)+j));//*(*(p+i)+j)表示第 i 行第 j 個元素的值。printf("\n");}/*0 1 2 34 5 6 78 9 10 11*/return 0; }

?

?

ref:

https://blog.csdn.net/weixin_41923658/article/details/88066916

https://blog.csdn.net/men_wen/article/details/52694069

https://blog.csdn.net/xia__mu/article/details/99879877

總結

以上是生活随笔為你收集整理的c语言之——指针数组与数组指针的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。