亚洲一级免费看,特黄特色大片免费观看播放器,777毛片,久久久久国产一区二区三区四区,欧美三级一区二区,国产精品一区二区久久久久,人人澡人人草

C語(yǔ)言

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

時(shí)間:2025-02-16 02:33:35 C語(yǔ)言 我要投稿
  • 相關(guān)推薦

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

  導(dǎo)語(yǔ):我們知道數(shù)組名就是指針常量,那么多維數(shù)組的指針變量如何運(yùn)作呢?下面讓我們了解一下多維數(shù)組的的指針變量。

  把二維數(shù)組a 分解為一維數(shù)組a[0],a[1],a[2]之后,設(shè)p為指向二維數(shù)組的指針變量。可定義為: int (*p)[4] 它表示p是一個(gè)指針變量,它指向二維數(shù)組a 或指向第一個(gè)一維數(shù)組a[0],其值等于a,a[0],或&a[0][0]等。而p+i則指向一維數(shù)組a[i]。從前面的分析可得出*(p+i)+j是二維數(shù)組i行j 列的元素的地址,而*(*(p+i)+j)則是i行j列元素的值。

  二維數(shù)組指針變量說(shuō)明的一般形式為: 類型說(shuō)明符 (*指針變量名)[長(zhǎng)度] 其中“類型說(shuō)明符”為所指數(shù)組的數(shù)據(jù)類型!*”表示其后的變量是指針類型。 “長(zhǎng)度”表示二維數(shù)組分解為多個(gè)一維數(shù)組時(shí), 一維數(shù)組的長(zhǎng)度,也就是二維數(shù)組的列數(shù)。應(yīng)注意“(*指針變量名)”兩邊的括號(hào)不可少,如缺少括號(hào)則表示是指針數(shù)組(本章后面介紹),意義就完全不同了。

  [Explain]main(){

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

  int(*p)[4];

  int i,j;

  p=a;

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

  for(j=0;j<4;j++) printf("%2d ",*(*(p+i)+j));

  }

  'Expain字符串指針變量的說(shuō)明和使用字符串指針變量的定義說(shuō)明與指向字符變量的指針變量說(shuō)明是相同的。只能按對(duì)指針變量的賦值不同來(lái)區(qū)別。 對(duì)指向字符變量的指針變量應(yīng)賦予該字符變量的地址。如: char c,*p=&c;表示p是一個(gè)指向字符變量c的指針變量。而: char *s="C Language";則表示s是一個(gè)指向字符串的指針變量。把字符串的首地址賦予s。

  請(qǐng)看下面一例。

  main(){

  char *ps;

  ps="C Language";

  printf("%s",ps);

  }

  運(yùn)行結(jié)果為:

  C Language

  上例中,首先定義ps是一個(gè)字符指針變量, 然后把字符串的首地址賦予ps(應(yīng)寫出整個(gè)字符串,以便編譯系統(tǒng)把該串裝入連續(xù)的一塊內(nèi)存單元),并把首地址送入ps。程序中的: char *ps;ps="C Language";等效于: char *ps="C Language";輸出字符串中n個(gè)字符后的所有字符。

  main(){

  char *ps="this is a book";

  int n=10;

  ps=ps+n;

  printf("%s/n",ps);

  }

  運(yùn)行結(jié)果為:

  book 在程序中對(duì)ps初始化時(shí),即把字符串首地址賦予ps,當(dāng)ps= ps+10之后,ps指向字符“b”,因此輸出為"book"。

  main(){

  char st[20],*ps;

  int i;

  printf("input a string:/n");

  ps=st;

  scanf("%s",ps);

  for(i=0;ps[i]!='/0';i++)

  if(ps[i]=='k'){

  printf("there is a 'k' in the string/n");

  break;

  }

  if(ps[i]=='/0') printf("There is no 'k' in the string/n");

  }

  本例是在輸入的字符串中查找有無(wú)‘k’字符。 下面這個(gè)例子是將指針變量指向一個(gè)格式字符串,用在printf函數(shù)中,用于輸出二維數(shù)組的各種地址表示的值。但在printf語(yǔ)句中用指針變量PF代替了格式串。 這也是程序中常用的方法。

  main(){

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

  char *PF;

  PF="%d,%d,%d,%d,%d/n";

  printf(PF,a,*a,a[0],&a[0],&a[0][0]);

  printf(PF,a+1,*(a+1),a[1],&a[1],&a[1][0]);

  printf(PF,a+2,*(a+2),a[2],&a[2],&a[2][0]);

  printf("%d,%d/n",a[1]+1,*(a+1)+1);

  printf("%d,%d/n",*(a[1]+1),*(*(a+1)+1));

  }

  在下例是講解,把字符串指針作為函數(shù)參數(shù)的使用。要求把一個(gè)字符串的內(nèi)容復(fù)制到另一個(gè)字符串中,并且不能使用strcpy函數(shù)。函數(shù)cprstr的形參為兩個(gè)字符指針變量。pss指向源字符串,pds指向目標(biāo)字符串。表達(dá)式:

  (*pds=*pss)!=`/0'

  cpystr(char *pss,char *pds){

  while((*pds=*pss)!='/0'){

  pds++;

  pss++; }

  }

  main(){

  char *pa="CHINA",b[10],*pb;

  pb=b;

  cpystr(pa,pb);

  printf("string a=%s/nstring b=%s/n",pa,pb);

  }

  在上例中,程序完成了兩項(xiàng)工作:一是把pss指向的源字符復(fù)制到pds所指向的目標(biāo)字符中,二是判斷所復(fù)制的字符是否為`/0',若是則表明源字符串結(jié)束,不再循環(huán)。否則,pds和pss都加1,指向下一字符。在主函數(shù)中,以指針變量pa,pb為實(shí)參,分別取得確定值后調(diào)用cprstr函數(shù)。由于采用的指針變量pa和pss,pb和pds均指向同一字符串,因此在主函數(shù)和cprstr函數(shù)中均可使用這些字符串。也可以把cprstr函數(shù)簡(jiǎn)化為以下形式:

  cprstr(char *pss,char*pds)

  {while ((*pds++=*pss++)!=`/0');}

  即把指針的移動(dòng)和賦值合并在一個(gè)語(yǔ)句中。 進(jìn)一步分析還可發(fā)現(xiàn)`/0'的ASCⅡ碼為0,對(duì)于while語(yǔ)句只看表達(dá)式的值為非0就循環(huán),為0則結(jié)束循環(huán),因此也可省去“!=`/0'”這一判斷部分,而寫為以下形式:

  cprstr (char *pss,char *pds)

  {while (*pdss++=*pss++);}

  表達(dá)式的意義可解釋為,源字符向目標(biāo)字符賦值, 移動(dòng)指針,若所賦值為非0則循環(huán),否則結(jié)束循環(huán)。這樣使程序更加簡(jiǎn)潔。簡(jiǎn)化后的程序如下所示。

  cpystr(char *pss,char *pds){

  while(*pds++=*pss++);

  }

  main(){

  char *pa="CHINA",b[10],*pb;

  pb=b;

  cpystr(pa,pb);

  printf("string a=%s/nstring b=%s/n",pa,pb);

  }


【多維數(shù)組的指針變量】相關(guān)文章:

C語(yǔ)言-15:多維數(shù)組與指針07-25

c語(yǔ)言數(shù)組指針變量的說(shuō)明和使用07-26

c語(yǔ)言知識(shí):數(shù)組指針和指針數(shù)組的區(qū)別07-27

C語(yǔ)言指針數(shù)組的概念07-19

PHP 多維數(shù)組的排序問(wèn)題12-06

C語(yǔ)言指針變量的類型07-31

C語(yǔ)言指針變量的運(yùn)算05-05

C語(yǔ)言數(shù)組與指針詳解08-15

C語(yǔ)言函數(shù)指針變量06-04