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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

c语言数组指针移位,C语言数组指针_3

發(fā)布時(shí)間:2023/12/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言数组指针移位,C语言数组指针_3 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

C語(yǔ)言中的數(shù)組指針與指針數(shù)組:

·數(shù)組指針

一、區(qū)分

首先我們需要了解什么是數(shù)組指針以及什么是指針數(shù)組,如下:

int *p[5];

int (*p)[5];

數(shù)組指針的意思即為通過(guò)指針引用數(shù)組,p先和*結(jié)合,說(shuō)明了p是一個(gè)指針變量,指向一個(gè)大小為5的數(shù)組。所以,int (*p)[5]即為一個(gè)數(shù)組指針。int *p[5]則是一個(gè)大小為5且存放整型指針的數(shù)組。

二、數(shù)組元素的指針

1.定義

指針變量既然可以指向變量,同樣的,也能指向數(shù)組元素,因此,數(shù)組元素的指針就是數(shù)組元素的地址。

它的寫(xiě)法為:

int *p=arr;

int *p=&a[0];

這邊我們需要再次明確,數(shù)組名并不代表整個(gè)數(shù)組,只是代表數(shù)組首元素的地址,因此上面兩個(gè)語(yǔ)句是一樣的。

2.運(yùn)算

由于指針指向的是一個(gè)地址,因此數(shù)組指針也同樣可以進(jìn)行相關(guān)運(yùn)算;例如指針的加減可以實(shí)現(xiàn)指針指向數(shù)組上一個(gè)或者下一個(gè)元素的功能。這邊需要說(shuō)明,數(shù)組指針中進(jìn)行乘法和除法是沒(méi)有意義的。

如下圖所示:

在定義指針變量的時(shí)候需要定義類型,如果指針p指向了一個(gè)數(shù)組中的一個(gè)元素,那么p+1并不是將地址加上1,而是系統(tǒng)判定類型之后加上一個(gè)數(shù)組元素所占用的字節(jié)數(shù)(即為p+1*d)。

3.通過(guò)指針引用數(shù)組元素

代碼如下圖:

#include

int main()

{

int a[10]={1,2,3,4,5,6,7,8,9,0};

int *p;

for(p=a ; p

{

printf("%d ",*p);

}

printf("

");

return 0;

}

先讓指針p指向a數(shù)組的首元素,打印*p(即指向數(shù)組的值),然后執(zhí)行p++,使得p指向下一個(gè)元素,直到輸出數(shù)組的十個(gè)元素為止。

三、通過(guò)指針引用多維數(shù)組

1.多維數(shù)組元素的地址

我們以二維數(shù)組為例,首先需要明確一點(diǎn)的是二維數(shù)組的首元素地址并非一個(gè)單個(gè)元素,而是首行的地址,如下圖:

下面我們列出相關(guān)地址的表示方式:

表示形式含義

a????二維數(shù)組名,指向a[0]

a[0], *(a+0), *a0行0列元素地址

a+1, &a[1]1行首地址

a[1], *(a+1)a[1][0]的地址

a[1]+2, *(a+1)+2, &a[1][2]

a[1][2]的地址

*(a[1]+2), *(*(a+1)+2), a[1][2]a[1][2]的值

上圖都是二維數(shù)組中地址的不同表示形式。

2.指向多維數(shù)組的指針變量

輸出每一個(gè)值依然可以像一維數(shù)組一樣,但這里我們可以介紹一種新的方法:

int main()

{

int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

int (*p)[12];

int i=0;

p=&a;

printf("%d

",(*p)[11]);

return 0;

}

就像我們前面的例子一樣,int(*p)[12]表示定義一個(gè)指針變量,它指向一個(gè)包含12個(gè)整型元素的一堆數(shù)組。我們將其設(shè)定為12便可以存下整個(gè)a數(shù)組,當(dāng)然也可以存一行4個(gè),最后如果輸出的話就方便了許多。

四、數(shù)組指針作函數(shù)參數(shù)

下面是幾種傳參的方式:

void test()

{

int arr[3][5] = {0};

print(arr);

}

void print(int arr[3][5])

{}

void print(int arr[][5])

{}

void print(int **arr)

{}

void print(int (*arr)[5])

{}

我們可以看出第三種方式明顯是不行的,這邊引用了一個(gè)二級(jí)指針,但是我們上面提到過(guò)數(shù)組的地址應(yīng)該放到數(shù)組指針中去。而第四種方法就是我們上面提到過(guò)的,而這種方式是可行的。

下面是一個(gè)一級(jí)指針傳參的例子:

#include

void print(int *p, int sz)

{

int i = 0;

for(i=0; i

{

printf("%d

", *(p+i));

}

}

int main()

{

int arr[10] = {1,2,3,4,5,6,7,8,9};

int *p = arr;

int sz = sizeof(arr)/sizeof(arr[0]);

print(p, sz);

return 0;

}

·指針數(shù)組

一、指針數(shù)組

1.定義

int *p[5];

上面使我們剛開(kāi)始舉出的例子,這就是一個(gè)最簡(jiǎn)單的指針數(shù)組。因此我們可以得出指針數(shù)組的定義。指針數(shù)組:一個(gè)數(shù)組的元素均為指針類型數(shù)據(jù),稱為指針數(shù)組。

假設(shè)我們定義一個(gè)數(shù)組,各個(gè)元素指向不同的字符串,如下圖:

上圖所示,我們定義一個(gè)指針數(shù)組arr,然后把各字符串的地址賦給各個(gè)元素,即arr[0]和arr[1]。

通過(guò)一個(gè)簡(jiǎn)單的函數(shù)就可以進(jìn)行輸出了。

二、指向指針數(shù)據(jù)的指針

首先我們可以定義一個(gè)指向指針數(shù)據(jù)的指針變量:

char **p;

為了方便我們理解,其實(shí)**p也就等于*(*p)。*p表示p為一個(gè)指針變量,前面的*表示*p指向的是char *類型的數(shù)據(jù)。換一句話來(lái)說(shuō),如果引用*p,就是得到p所指向的值,如果拿上面的例子來(lái)說(shuō)就是字符串"Hello"和"World"。

我們可以通過(guò)下面的代碼來(lái)實(shí)現(xiàn):

int main()

{

char *arr[]={"Hello","World"};

char **p;

int i;

for(i=0; i<2; i++)

{

p=arr+i;

printf("%s ",*p);

}

return 0;

}

參考博文:

指針數(shù)組與數(shù)組指針詳解:

C語(yǔ)言指針詳解(經(jīng)典,非常詳細(xì))

總結(jié)

以上是生活随笔為你收集整理的c语言数组指针移位,C语言数组指针_3的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。