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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

c语言指着与数组,C语言指针与数组

發(fā)布時間:2023/12/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言指着与数组,C语言指针与数组 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一維數(shù)組 與? 指針

1.C語言規(guī)定:如果指針變量p已指向同一數(shù)組中的下一個元素,見下:

定義: int dates[4],? *p;

那么:dates+2=&dates[2];

*(dates+2)=dates[2];

延伸:如果:p=&dates[n];

那么:p+i 就指向 &dates[n+i];

*(p+i)就指向 dates[n+i];

p-i 就指向 &dates[n-i];

*(p-i)就指向 dates[n-i];

例子: 函數(shù)1

int array_sum(int array, int n)

{

int sum=0, *p;

int *array.end=array+n

for(p=array;p

sum+=*p;

return(sum);

}

函數(shù)2

int array_sum(int array, int n)

{

int sum=0;

int i;

for(i=0;i

sum+=array[i];

return(sum);

}

總結(jié):

C語言編譯程序通常會將其中array[i]處理為*(array+i),

每次都要增加一次加法運(yùn)算,效率就會低一些,所以使用指針訪

問數(shù)組元素的主要原因。

#include

int array_sum(int array[], int n);

void main()

{

int a[10],i;

printf("請輸入10個元素:\n");

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

scanf("%d",&a[i]);

printf("輸入的元素是:\n");

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

printf("%d",a[i]);

printf("輸入元素的和是:\n");

printf("%d",array_sum(a,10));

}

int array_sum(int array[], int n)

{

int sum=0, *p;

int *array_end=array+n;

for(p=array;p

sum+=*p;

return(sum);

}

二維數(shù)組與指針

數(shù)組都是按照行來存儲的。

例如:

int a[3][4]={{10,20,30,40},{50,60,70,80},{90,91,92,93}};

則數(shù)組a有三個元素,分別為a[0],a[1],a[2].每個數(shù)組都是一維數(shù)組,

各包含4個元素。如a[1]的4個元素分別是:a[1][0]? a[1][1] a[1][2] a[1][3]

分解圖:

數(shù) 組???????? --------------->

a??????? a[0]--------------->10?? 20??? 30??? 40

a[1]--------------->50?? ?60??? 70??? 80

a[2]--------------->90??? 91??? 92??? 93

再如:

int *p=a[0];

則數(shù)組a的元素a[1][2]對應(yīng)的指針為:? p+1*4+2

元素a[1][2] 也就可以表示為????? :????? *(p+1*4+2)

用下標(biāo)表示法,a[1][2]表示為:???????? ?p[1*4+2]

對于二維數(shù)組a,雖然a[0]、a都是數(shù)組首地址,但二者指向的對象不同。

a[0] 是一維數(shù)組的名字,它指向的是a[0]數(shù)組的首元素。

*a[0]得到的是一個數(shù)組元素的值,即a[0]數(shù)組首元素的值。所以*a[0]和a[0][0]是一個值。

a?? 是二維數(shù)組的名字,它指向所有元素的首元素。它的每一個元素?? 都是一個行數(shù)組,

因此 它的指針移動單位是“行”,所以a+i指向的是第i行的數(shù)組。即指向a[i].

*a? 得到的是一維數(shù)組a[0]的首地址,即*a與a[0]是同一個值。

備注:

當(dāng)int *p; 定義指針p時,p是一個指向int型的數(shù)據(jù),而不是一個地址,

所以 *p=a[0]是對的。

由上面可知道:

對于二維數(shù)組a,其a[0]數(shù)組由a指向,a[1]數(shù)組由a+1指向,以此類推:

a[i]的數(shù)組,由*(a+i)指向。

對于數(shù)組元素a[i][j],用

*(*(a+i)+j)? 表示,指向該元素的指針為*(a+i)+j.

數(shù)組名雖然是數(shù)組的首地址,但數(shù)組名自定義的時候就確定了,不可以通過賦值老

改變。但指向數(shù)組的指針,指針變量的值可以改變,即它可以隨時指向不同的數(shù)組

或同類型變量。

#include

int main()

{

int a[3][4]={{3,17,8,11},{66,7,8,19},{12,88,7,16}};

int *p=a[0],max,row,col,i,j;

max=a[0][0];

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

for(j=0;j<4;j++)

{

if(*(p+i*4+j)> max)? //行存儲

{

max=*(p+4*i+j);

row=i;

col=j;

}

}

printf("a[%d][%d]=%d\n",row,col,max);

return 0;

}

二維數(shù)組指針:

數(shù)據(jù)類型 (*指針變量名)[二維數(shù)組列數(shù)]

對上述a數(shù)組,行數(shù)組指針定義如下:

int (*p)[4]

表示:

數(shù)組*p有4個int型元素,分別是(*p)[0] 、 (*p)[1]? 、(*p)[2]? 、(*p)[3]。

可用下列方式對指針賦值:

p=a;

賦值后p的指向:

p----------->10??? 11??? 12?? 13

p+1--------->20??? 21??? 22?? 23

p+2--------->30??? 31??? 32?? 33

修改上面的例子可以改成:

//題目:求二維數(shù)組元素的最大值,并確定最大值元素所在的行和列

//題目:求二維數(shù)組元素的最大值,并確定最大值元素所在的行和列

#include

int main()

{

int a[3][4]={{3,17,8,11},{66,7,8,19},{12,88,7,16}};

int (*p)[4],max,row,col,i,j;

p=a;

max=a[0][0];

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

for(j=0;j<4;j++)

{

//if(*(p+i*4+j)> max)

if(*(*(p+i)+j)>max)?????? //修改的地方

{

//max=*(p+4*i+j);

max=*(*(p+i)+j);??? row=i;

col=j;

}

}

printf("a[%d][%d]=%d\n",row,col,max);

return 0;

}

備注: a[0]:是一維數(shù)組的名字,它指向的是a[0]數(shù)組的首元素。 a?? :是二維數(shù)組的名字,它指向所有元素的首元素。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

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

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