亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

C語言

C語言指針數(shù)組的概念

時間:2024-07-19 15:55:25 C語言 我要投稿
  • 相關(guān)推薦

C語言指針數(shù)組的概念

  一個數(shù)組的元素值為指針則是指針數(shù)組。 指針數(shù)組是一組有序的指針的集合。 指針數(shù)組的所有元素都必須是具有相同存儲類型和指向相同數(shù)據(jù)類型的指針變量。

C語言指針數(shù)組的概念

  指針數(shù)組說明的一般形式為:

  類型說明符 *數(shù)組名[數(shù)組長度]

  其中類型說明符為指針值所指向的變量的類型。例如:

  int *pa[3]

  表示pa是一個指針數(shù)組,它有三個數(shù)組元素,每個元素值都是一個指針,指向整型變量。

  【例10-33】通?捎靡粋指針數(shù)組來指向一個二維數(shù)組。指針數(shù)組中的每個元素被賦予二維數(shù)組每一行的首地址,因此也可理解為指向一個一維數(shù)組。

  main(){

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

  int *pa[3]={a[0],a[1],a[2]};

  int *p=a[0];

  int i;

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

  printf("%d,%d,%d ",a[i][2-i],*a[i],*(*(a+i)+i));

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

  printf("%d,%d,%d ",*pa[i],p[i],*(p+i));

  }

  本例程序中,pa是一個指針數(shù)組,三個元素分別指向二維數(shù)組a的各行。然后用循環(huán)語句輸出指定的數(shù)組元素。其中*a[i]表示i行0列元素值;*(*(a+i)+i)表示i行i列的元素值;*pa[i]表示i行0列元素值;由于p與a[0]相同,故p[i]表示0行i列的值;*(p+i)表示0行i列的值。讀者可仔細(xì)領(lǐng)會元素值的各種不同的表示方法。

  應(yīng)該注意指針數(shù)組和二維數(shù)組指針變量的區(qū)別。這兩者雖然都可用來表示二維數(shù)組,但是其表示方法和意義是不同的。

  二維數(shù)組指針變量是單個的變量,其一般形式中"(*指針變量名)"兩邊的括號不可少。而指針數(shù)組類型表示的是多個指針(一組有序指針)在一般形式中"*指針數(shù)組名"兩邊不能有括號。例如:

  int (*p)[3];

  表示一個指向二維數(shù)組的指針變量。該二維數(shù)組的列數(shù)為3或分解為一維數(shù)組的長度為3。

  int *p[3]

  表示p是一個指針數(shù)組,有三個下標(biāo)變量p[0],p[1],p[2]均為指針變量。

  指針數(shù)組也常用來表示一組字符串,這時指針數(shù)組的每個元素被賦予一個字符串的首地址。指向字符串的指針數(shù)組的初始化更為簡單。例如在例10.32中即采用指針數(shù)組來表示一組字符串。其初始化賦值為:

  char *name[]={"Illagal day",

  "Monday",

  "Tuesday",

  "Wednesday",

  "Thursday",

  "Friday",

  "Saturday",

  "Sunday"

  };

  完成這個初始化賦值之后,name[0]即指向字符串"Illegal day",name[1]指向"Monday"......。

  指針數(shù)組也可以用作函數(shù)參數(shù)。

  【例10-34】指針數(shù)組作指針型函數(shù)的參數(shù)。在本例主函數(shù)中,定義了一個指針數(shù)組name,并對name 作了初始化賦值。其每個元素都指向一個字符串。然后又以name作為實參調(diào)用指針型函數(shù)day_name,在調(diào)用時把數(shù)組名name賦予形參變量name,輸入的`整數(shù)i作為第二個實參賦予形參n。在day_ name函數(shù)中定義了兩個指針變量pp1和pp2,pp1被賦予name[0]的值(即*name),pp2被賦予name[n]的值即*(name+ n)。由條件表達(dá)式?jīng)Q定返回pp1或pp2指針給主函數(shù)中的指針變量ps。最后輸出i和ps的值。

  main(){

  static char *name[]={ "Illegal day",

  "Monday",

  "Tuesday",

  "Wednesday",

  "Thursday",

  "Friday",

  "Saturday",

  "Sunday"

  };

  char *ps;

  int i;

  char *day_name(char *name[],int n);

  printf("input Day No: ");

  scanf("%d",&i);

  if(i<0) exit(1);

  ps=day_name(name,i);

  printf("Day No:%2d-->%s ",i,ps);

  }

  char *day_name(char *name[],int n){

  char *pp1,*pp2;

  pp1=*name;

  pp2=*(name+n);

  return((n<1||n>7)? pp1:pp2);

  }

  【例10-35】輸入5個國名并按字母順序排列后輸出,F(xiàn)編程如下:

  #include"string.h"

  main(){

  void sort(char *name[],int n);

  void print(char *name[],int n);

  static char *name[]={ "CHINA","AMERICA","AUSTRALIA","FRANCE","GERMAN"};

  int n=5;

  sort(name,n);

  print(name,n);

  }

  void sort(char *name[],int n){

  char *pt;

  int i,j,k;

  for(i=0;i<n-1;i++){

  k=i;

  for(j=i+1;j<n;j++)

  if(strcmp(name[k],name[j])>0) k=j;

  if(k!=i){

  pt=name[i];

  name[i]=name[k];

  name[k]=pt;

  }

  }

  }

  void print(char *name[],int n){

  int i;

  for (i=0;i<n;i++) printf("%s ",name[i]);

  }

  說明:

  1) 在以前的例子中采用了普通的排序方法,逐個比較之后交換字符串的位置。交換字符串的物理位置是通過字符串復(fù)制函數(shù)完成的。反復(fù)的交換將使程序執(zhí)行的速度很慢,同時由于各字符串(國名)的長度不同,又增加了存儲管理的負(fù)擔(dān)。用指針數(shù)組能很好地解決這些問題。把所有的字符串存放在一個數(shù)組中,把這些字符數(shù)組的首地址放在一個指針數(shù)組中,當(dāng)需要交換兩個字符串時,只須交換指針數(shù)組相應(yīng)兩元素的內(nèi)容(地址)即可,而不必交換字符串本身。

  2) 本程序定義了兩個函數(shù),一個名為sort完成排序,其形參為指針數(shù)組name,即為待排序的各字符串?dāng)?shù)組的指針。形參n為字符串的個數(shù)。另一個函數(shù)名為print,用于排序后字符串的輸出,其形參與sort的形參相同。主函數(shù)main中,定義了指針數(shù)組name 并作了初始化賦值。然后分別調(diào)用sort函數(shù)和print函數(shù)完成排序和輸出。值得說明的是在sort函數(shù)中,對兩個字符串比較,采用了strcmp函數(shù),strcmp函數(shù)允許參與比較的字符串以指針方式出現(xiàn)。name[k]和name[j]均為指針,因此是合法的。字符串比較后需要交換時,只交換指針數(shù)組元素的值,而不交換具體的字符串,這樣將大大減少時間的開銷,提高了運行效率。

【C語言指針數(shù)組的概念】相關(guān)文章:

C語言指針的概念08-20

如何使用C語言數(shù)組指針09-14

C語言中指針與數(shù)組的區(qū)別10-09

C語言中指針的概念03-16

C語言指針和數(shù)組基礎(chǔ)知識10-26

C語言中各種類型的指針的概念總結(jié)11-24

什么是C語言數(shù)組10-03

C語言數(shù)組教程08-31

C語言指針函數(shù)和函數(shù)指針詳解09-29

C語言的指針類型詳解05-21