国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
指針數(shù)組與數(shù)組指針

數(shù)組中每個(gè)元素都具有相同的數(shù)據(jù)類型,數(shù)組元素的類型就是數(shù)組的基類型。如果一個(gè)數(shù)組中的每個(gè)元素均為指針類型,即由指針變量構(gòu)成的數(shù)組,這種數(shù)組稱之為指針數(shù)組,它是指針的集合。
指針數(shù)組說(shuō)明的形式為:
類型 * 數(shù)組名[常量表達(dá)式]
例如: int * pa[5];
表示定義一個(gè)由5個(gè)指針變量構(gòu)成的指針數(shù)組,數(shù)組中的每個(gè)數(shù)組元素--指針,都指向一個(gè)整數(shù),其結(jié)構(gòu)如圖10-9所示。

注意"int *pa[5]"與"int (*pb)[5]"的區(qū)別。
int (* pb)[5];
表示定義了一個(gè)指向數(shù)組的指針pb,pb指向的數(shù)組是一維的體積為5的整型數(shù)組,其結(jié)構(gòu)如圖10-10所示。
char * line[5];
表示line是一個(gè)5個(gè)元素的數(shù)組,每個(gè)元素是一個(gè)指向字符型數(shù)據(jù)的一個(gè)指針。若設(shè)指向的字符型數(shù)據(jù)(字符串)分別是"ONE"、"TWO"、…、"FIVE",則數(shù)組line的結(jié)構(gòu)如圖10-11所示。

而:char (*line)[5];
表示line是指向一個(gè)長(zhǎng)度為5的字符數(shù)組的指針。
指針數(shù)組常適用于指向若干字符串,這樣使字符串處理更加靈活方便。
例10-16:輸入字符串,判斷該字符串是否是英文的星期幾。使用指針數(shù)組實(shí)現(xiàn)。
#include <stdio.h>
char *week_day[8]= {"sunday", "monday", "tuesday", "wednesday",
"thursday", "friday", "saturday", NULL
}; /* 說(shuō)明指針數(shù)組。數(shù)組中的每個(gè)元素指向一個(gè)字符串 */
main( )
{ int m;
char string[20];
printf("Enter a string: ");
scanf("%s", string);
m=lookup(string);
printf("l=%d\n", m);
}
lookup (ch)
char ch[ ]; /* 傳遞字符串(字符數(shù)組) */
{ int i, j;
char *pc;
for (i=0; week_day[i]!=NULL; i++) /* 完成查找工作 */
{ for( pc=week_day[i],j=0; *pc==ch[j] && *pc!= ‘\0‘; j++,pc++ );
if ( *pc==‘\0‘ )
return(i); /* 若找到則返回對(duì)應(yīng)的序號(hào) */
}
return(-1); /* 若沒(méi)有找到,則返回-1 */
}


程序中沒(méi)有使用二維的字符數(shù)組,而是采用指針數(shù)組week_day??梢钥吹街羔様?shù)組比二維字符數(shù)組有明顯的優(yōu)點(diǎn),一是指針數(shù)組中每個(gè)元素所指的字符串不必限制在相同的字符長(zhǎng)度,二是訪問(wèn)指針數(shù)組中的一個(gè)元素是用指針間接進(jìn)行的,效率比下標(biāo)方式要高。
例10-17:輸入星期幾,輸出對(duì)應(yīng)星期的英文名稱。用指針數(shù)組實(shí)現(xiàn)。
#include <stdio.h>
char * week_day[8]= {"sunday", "monday", "tuesday", "wednesday",
"thursday", "friday", "saturday", NULL };
/* 說(shuō)明指針數(shù)組。數(shù)組中的每個(gè)元素指向一個(gè)字符串 */
main( )
{ int day;
char *p, *lookstr( );
printf("Enter day: ");
scanf("%d", &day);
p = lookstr (week_day, day);
printf("%s\n", p);
}
char * lookstr ( table, day ) /* 函數(shù)的返回值為指向字符的指針 */
char *table[ ]; /* 傳遞指向字符串的指針數(shù)組 */
int day;
{ int i;
for (i=0; i<day && table[i]!=NULL; i++) ;
if (i==day && table[i]!=NULL)
return ( table[day] );
else return(NULL);
}


例10-18:修改程序10-11,用數(shù)組指針作為形參實(shí)現(xiàn)函數(shù)day_of_year。
#include <stdio.h>
main( )
{ static int day_tab[2][13]={ 0,31,28,31,30,31,30,31,31,30,31,30,31,
0,31,29,31,30,31,30,31,31,30,31,30,31 };
int y, m, d;
scanf ("%d%d%d", &y, &m, &d);
printf("days=%d\n", day_of_year( day_tab, y, m, d ) );
}
day_of_year (day_tab, year, month, day)
int (*day_tab)[13], year, month, day; /* day_tab為數(shù)組指針 */
{ int i, j;
i = year%4==0 && year%100!=0 || year%400==0;
for (j=1; j<month; j++)
day += (*(day_tab+i))[j]; /* 引用數(shù)組指針指向的數(shù)組中的元素 */
return (day);
}


   請(qǐng)將例C10-11.C和例C10-18.C函數(shù)day_of_year進(jìn)行比較,體會(huì)不同類型的形式參數(shù)在函數(shù)中的使用方法。
事實(shí)上,在程序中可以用指針靈活地處理多維數(shù)組,使程序優(yōu)化,并可提高程序的技巧。例如:對(duì)于一個(gè)三維數(shù)組
long a[100][100][100];
要將所有的元素都清0,可采用下面兩種方法:
方法一:采用常規(guī)的多維數(shù)組處理方式 方法二:采用指針處理方式
  long a[100][100][100], i , j, k;   long a[100][100][100], i, *pa;
for (i=0; i<100; i++) pa = a;
for (j=0; j<100; j++) for (i=0; i<100*100*100; i++)
for (k=0; k<100; k++) *pa++ = 0;
a[i][j][k]=0;
方法一直接使用三維數(shù)組中的數(shù)組元素,訪問(wèn)其中的任一數(shù)組元素a[i][j][k]時(shí),每次都要調(diào)用數(shù)組元素地址的計(jì)算公式。而方法二則利用三維數(shù)組在內(nèi)存中是按行線性順序存放的這一特性,通過(guò)一個(gè)指針順序加1的方法實(shí)現(xiàn)對(duì)數(shù)組a中所有元素的賦0操作。兩種處理方法相比較,方法二處理速度比方法一快得多。


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C語(yǔ)言學(xué)習(xí)教程第六章-指針(6)
C語(yǔ)言指針數(shù)組的概念
C語(yǔ)言面試題
char argv, char argv[], char* argv, char argv[][], char * argv[], char** argv, char (*argv)[]
C語(yǔ)言難點(diǎn)分析整理
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服