青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

幽魂國度

 

指針的指針

指向另一指針的指針:轉自風過無痕博客
 

一. 回顧指針概念:
早在本系列第二篇中我就對指針的實質進行了闡述。今天我們又要學習一個叫做指向另一指針地址的指針。讓我們先回顧一下指針的概念吧!
當我們程序如下申明變量:
short int i;
char a;
short int * pi;
程序會在內存某地址空間上為各變量開辟空間,如下圖所示。
內存地址→6     7      8     9     10     11    12    13     14    15
-------------------------------------------------------------------------------------
…  |     |      |      |      |      |       |      |      |      |  
-------------------------------------------------------------------------------------
    |short int i |char a|      |short int * pi|
圖中所示中可看出:
i 變量在內存地址5的位置,占兩個字節。
a變量在內存地址7的位置,占一個字節。
pi變量在內存地址9的位置,占兩個字節。(注:pi 是指針,我這里指針的寬度只有兩個字節,32位系統是四個字節)
接下來如下賦值:
i=50;
pi=&i;
經過上在兩句的賦值,變量的內存映象如下:
內存地址→6     7      8     9     10     11    12    13      14     15
--------------------------------------------------------------------------------------
…  |    50      |      |      |    6         |      |      |       |  
--------------------------------------------------------------------------------------
    |short int i |char a|      |short int * pi|
看到沒有:短整型指針變量pi的值為6,它就是I變量的內存起始地址。所以,這時當我們對*pi進行讀寫操作時,其實就是對i變量的讀寫操作。如:
*pi=5;   //就是等價于I=5;

二. 指針的地址與指向另一指針地址的指針
在上一節中,我們看到,指針變量本身與其它變量一樣也是在某個內存地址中的,如pi的內存起始地址是10。同樣的,我們也可能讓某個指針指向這個地址。
看下面代碼:
short int * * ppi;    //這是一個指向指針的指針,注意有兩個*號
ppi=pi
第一句:short int * * ppi;——申明了一個指針變量ppi,這個ppi是用來存儲(或稱指向)一個short int * 類型指針變量的地址。
第二句:&pi那就是取pi的地址,ppi=pi就是把pi的地址賦給了ppi。即將地址值10賦值給ppi。如下圖:
內存地址→6     7      8     9     10     11    12    13       14    15
------------------------------------------------------------------------------------
…  |    50     |      |      |      6       |       10      |      |  
------------------------------------------------------------------------------------
    |short int i|char a|      |short int * pi|short int ** ppi|
從圖中看出,指針變量ppi的內容就是指針變量pi的起始地址。于是……
ppi的值是多少呢?——10。
*ppi的值是多少呢?——6,即pi的值。
**ppi的值是多少呢?——50,即I的值,也是*pi的值。
呵呵!不用我說太多了,我相信你應明白這種指針了吧!

三. 一個應用實例
1. 設計一個函數:void find1(char array[], char search, char * pi)
要求:這個函數參數中的數組array是以0值為結束的字符串,要求在字符串array中查找字符是參數search里的字符。如果找到,函數通過第三個參數(pa)返回值為array字符串中第一個找到的字符的地址。如果沒找到,則為pa為0。
設計:依題意,實現代碼如下。
void find1(char array[] , char search, char * pa)
{
   int i;
   for (i=0;*(array+i)!=0;i++)
   {
      if (*(array+i)==search)
      {
        pa=array+i
        break;
      }
      else if (*(array+i)==0)
      {
        pa=0;
        break;
      }
   }
}
你覺得這個函數能實現所要求的功能嗎?
調試:
我下面調用這個函數試試。
void main()
{
  char str[]={“afsdfsdfdf\0”};  //待查找的字符串
  char a=’d’;   //設置要查找的字符
  char * p=0;  //如果查找到后指針p將指向字符串中查找到的第一個字符的地址。
  find1(str,a,p);  //調用函數以實現所要操作。
  if (0==p )
  {
     printf (“沒找到!\n”);//1.如果沒找到則輸出此句
  }
  else
  {
     printf(“找到了,p=%d”,p);  //如果找到則輸出此句
  }
}
分析:
上面代碼,你認為會是輸出什么呢?
運行試試。
唉!怎么輸出的是:沒有找到!
而不是:找到了,……。
明明a值為’d’,而str字符串的第四個字符是’d’,應該找得到呀!
再看函數定義處:void find1(char array[] , char search, char * pa)
看調用處:find1(str,a,p);
依我在第五篇的分析方法,函數調用時會對每一個參數進行一個隱含的賦值操作。
整個調用如下:
   array=str;
   search=a;
   pa=p;    //請注意:以上三句是調用時隱含的動作。
   int i;
   for (i=0;*(array+i)!=0;i++)
   {
      if (*(array+i)==search)
      {
        pa=array+i
        break;
      }
      else if (*(array+i)==0)
      {
        pa=0;
        break;
      }
   }
哦!參數pa與參數search的傳遞并沒有什么不同,都是值傳遞嘛(小語:地址傳遞其實就是地址值傳遞嘛)!所以對形參變量pa值(當然值是一個地址值)的修改并不會改變實參變量p值,因此p的值并沒有改變(即p的指向并沒有被改變)。
(如果還有疑問,再看一看《函數參數的傳遞》了。)
修正:
void find2(char [] array, char search, char ** ppa)
{
   int i;
   for (i=0;*(array+i)!=0;i++)
   {
      if (*(array+i)==search)
      {
        *ppa=array+i
        break;
      }
      else if (*(array+i)==0)
      {
        *ppa=0;
        break;
      }
   }
}
主函數的調用處改如下:
  find2(str,a,&p);  //調用函數以實現所要操作。
再分析:
這樣調用函數時的整個操作變成如下:
   array=str;
   search=a;
   ppa=&p;    //請注意:以上三句是調用時隱含的動作。
   int i;
   for (i=0;*(array+i)!=0;i++)
   {
      if (*(array+i)==search)
      {
        *ppa=array+i
        break;
      }
      else if (*(array+i)==0)
      {
        *ppa=0;
        break;
      }
   }
看明白了嗎?
ppa指向指針p的地址。
對*ppa的修改就是對p值的修改。
下面看一下指向指針變量的指針變量怎樣正確引用。
用指向指針的指針變量訪問一維和二維數組。

#include<stdio.h>
#include<stdlib.h>
main()
{
int a[3],b[2][2],*p1,*p2,**p3,i,j;

printf("請輸入一維數組的值:\n");
for(i=0;i<3;i++)
scanf("%d",&a[i]);/*一維數組的輸入*/

printf("請輸入二維數組的值:\n");
for(i=0;i<2;i++)
for(j=0;j<2;j++)
scanf("%d",&b[i][j]);/*二維數組輸入*/

printf("用指針輸出一維數組:\n");
for(p1=a,i=0;i<3;i++)     /* 用指針輸出一維數組*/
{
    printf("%4d",*(p1+i));
}
printf("\n");

printf("用指向指針的指針變量輸出一維數組(1):\n");
for(p1=a,p3=&p1,i=0;i<3;i++)
printf("%4d",*(*p3+i));/*用指向指針的指針變量輸出一維數組*/
printf("\n");
printf("用指向指針的指針變量輸出一維數組(2):\n");
for(p1=a;p1-a<3;p1++)/*用指向指針的指針變量輸出一維數組*/
{
p3=&p1;
printf("%4d",**p3);
}
printf("\n");

printf("用指針輸出二維數組:\n");
for(i=0;i<2;i++)   /*用指針輸出二維數組*/
{
   p2=b[i] ;
   for(int j=0;j<2;j++)
  {
    printf("%4d",*(p2+j)) ;
  }
}
printf("\n");

printf("用指向指針的指針變量輸出二維數組(1):\n");
for(i=0;i<2;i++)/*用指向指針的指針變量輸出二維數組*/
{
p2=b[i];
p3=&p2;
for(j=0;j<2;j++)
printf("%4d",*(*p3+j));

利用指向指針的指針變量對二維字符數組的訪問。

#include<stdio.h>
#include<stdlib.h>
main()
{
int i;
char * ptr;
static char c[][16]={"clanguage","fox","computer","homepage"};
/*二維字符數組*/
static char *cp[]={c[0],c[1],c[2],c[3]};/*指針數組*/
static char **cpp;/*指向字符指針的指針變量*/
cpp=cp;/*將指針數組的首地址傳遞給指向字符指針的指針變量*/


for(i=0;i<4;i++)/*按行輸出字符串*/
printf("%s\n",*cpp++);
printf("-----------\n");

for(i=0;i<4;i++)/*按行輸出字符串*/
{
cpp=&cp[i];
printf("%s\n",*cpp);
}
printf("-----------\n");

 
 for(i=0;i<4;i++)
 {
    ptr=c[i];
    printf("%s",ptr);
    printf("\n");
 }
 

}

}
printf("\n");

 printf("用指向指針的指針變量輸出二維數組(2):\n");
for(i=0;i<2;i++)/*用指向指針的指針變量輸出二維數組*/
{
p2=b[i];
for(p2=b[i];p2-b[i]<2;p2++)
{
p3=&p2;
printf("%4d",**p3);
}
printf("\n");
}

}

posted on 2009-11-22 22:31 閱讀(364) 評論(0)  編輯 收藏 引用

導航

統計

常用鏈接

留言簿

隨筆檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久尤物视频| 欧美va亚洲va香蕉在线| 久久国产66| 性感少妇一区| 久久亚洲一区| 欧美成人网在线| 亚洲国产精品尤物yw在线观看 | 欧美亚洲综合在线| 欧美专区日韩专区| 老司机精品久久| 欧美成人免费大片| 亚洲欧洲一区二区天堂久久 | 亚洲区第一页| 亚洲欧洲综合另类在线| 亚洲网址在线| 久久精品中文| 欧美人交a欧美精品| 国产精品一区二区a| 黄色精品一二区| 亚洲免费av电影| 久久成人一区| 亚洲欧洲一区二区天堂久久| 国产精品99久久久久久白浆小说| 久久国产精品第一页| 欧美日本免费| 在线观看成人网| 亚洲欧美自拍偷拍| 欧美激情精品久久久久久变态| 日韩一级片网址| 久久亚洲春色中文字幕久久久| 欧美午夜欧美| 日韩香蕉视频| 欧美v亚洲v综合ⅴ国产v| 亚洲网址在线| 欧美极品影院| 亚洲第一久久影院| 欧美在线观看一区二区| 亚洲精品午夜精品| 久热re这里精品视频在线6| 国产精品一国产精品k频道56| 亚洲老板91色精品久久| 免费不卡在线观看av| 亚洲综合不卡| 国产精品伦理| 亚洲永久网站| av成人天堂| 欧美人交a欧美精品| 亚洲欧洲一区二区天堂久久| 久久天天狠狠| 欧美在线一二三区| 国产亚洲aⅴaaaaaa毛片| 亚洲欧美日韩一区二区三区在线观看 | 久久躁狠狠躁夜夜爽| 亚洲永久免费观看| 国产精品久久久久久超碰| 欧美性一区二区| 午夜在线a亚洲v天堂网2018| 欧美福利视频| 久久久久久久波多野高潮日日| 国产精品国产三级国产普通话三级| 亚洲国产清纯| 亚洲国产精品999| 免费日韩av| 亚洲精品免费在线播放| 亚洲国产精品成人精品| 欧美国产精品日韩| 亚洲精品综合在线| 91久久中文| 欧美日韩在线视频观看| 亚洲主播在线播放| 午夜久久久久久| 国内精品伊人久久久久av影院| 久久精品国产亚洲精品| 久久久久高清| 亚洲国产精品久久久久秋霞不卡| 欧美va亚洲va日韩∨a综合色| 老巨人导航500精品| 亚洲精品乱码久久久久久久久| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲高清资源| 欧美伦理一区二区| 午夜精品久久| 欧美在线观看视频一区二区三区 | 亚洲视频在线观看| 亚洲一区二区网站| 伊人精品在线| 99riav1国产精品视频| 国产欧美精品日韩| 欧美高清视频在线| 国产精品二区在线观看| 久久久蜜桃一区二区人| 欧美激情精品久久久六区热门| 亚洲直播在线一区| 美女黄网久久| 欧美一区二区视频在线观看| 久热精品视频在线| 销魂美女一区二区三区视频在线| 久久久免费精品视频| 亚洲影院色无极综合| 麻豆精品精华液| 欧美在线播放视频| 欧美日韩国产成人在线观看| 久久青草福利网站| 欧美日韩一级黄| 蜜臀va亚洲va欧美va天堂| 欧美性色aⅴ视频一区日韩精品| 久久中文字幕一区二区三区| 欧美天堂亚洲电影院在线播放 | 国产九九精品| 国产麻豆精品theporn| 欧美不卡激情三级在线观看| 欧美日韩一区二区免费在线观看| 久久国产精品99久久久久久老狼| 欧美电影免费观看高清完整版| 欧美一区二区三区婷婷月色| 欧美国产成人精品| 免费亚洲网站| 国产午夜精品理论片a级大结局 | 性一交一乱一区二区洋洋av| 欧美精品999| 欧美国产精品劲爆| 狠狠色综合网| 性欧美8khd高清极品| 亚洲欧美国产77777| 欧美超级免费视 在线| 猛男gaygay欧美视频| 国产亚洲在线| 欧美在线国产| 久久天天综合| 极品日韩av| 久久久久久欧美| 欧美sm重口味系列视频在线观看| 好看不卡的中文字幕| 久久精品99无色码中文字幕| 久久国产夜色精品鲁鲁99| 国产精品久久久久久久久久免费看| 日韩网站在线| 亚洲无线视频| 国产精品毛片| 亚洲欧美电影在线观看| 午夜精品久久久久久久男人的天堂 | 午夜精品美女自拍福到在线| 欧美日韩在线视频观看| av成人激情| 亚洲欧美日韩第一区 | 在线中文字幕一区| 欧美日韩精品伦理作品在线免费观看| 亚洲成人在线网| 99国产精品视频免费观看一公开 | 影音先锋另类| 久久中文精品| 亚洲精品你懂的| 亚洲一区二区三区在线| 国产精品高清在线观看| 亚洲欧美日韩国产综合精品二区| 久久本道综合色狠狠五月| 在线观看国产成人av片| 欧美激情麻豆| 亚洲一区二区影院| 欧美成人一区二区三区在线观看 | 亚洲永久在线| 久久综合九色综合久99| 亚洲精品久久嫩草网站秘色| 亚洲精品日韩在线| 亚洲午夜羞羞片| 欧美一区二区三区四区高清 | 久久久噜噜噜久噜久久 | 麻豆av一区二区三区| 亚洲精品午夜| 国产日韩在线看片| 欧美国产一区二区三区激情无套| 99在线热播精品免费| 久久久国产精彩视频美女艺术照福利| 亚洲高清激情| 国产女主播一区二区| 欧美激情第10页| 欧美一二三区精品| 91久久中文字幕| 久久蜜桃香蕉精品一区二区三区| 亚洲免费av网站| 狠狠色综合网| 亚洲小视频在线| 国产精品一区二区女厕厕| 一二三区精品| 亚洲欧洲精品天堂一级| 欧美性感一类影片在线播放| 久久久久久穴| 亚洲特级毛片| 91久久精品国产91性色tv| 午夜一区二区三区在线观看| 亚洲激情视频在线观看| 国产丝袜美腿一区二区三区| 欧美精品一区三区在线观看| 久久国产夜色精品鲁鲁99| 一区二区免费在线观看| 亚洲激情视频在线观看| 免费久久久一本精品久久区| 欧美在线视频在线播放完整版免费观看 | 欧美在线一区二区| 亚洲性视频网址|