成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

程序員考試筆記十:數組

企業動態
程序員考試筆記(連載中...)

        今天接著上天的二維數組,我們看看指向二維數組的指針是怎么的。在講之前我想再重復一次,如果你自己理解好二維數組的就按你以往的去理解吧。不過多想想幾種方法也是一件好事,那么下面就來講講了。

  現在來看看昨天的那個二維數組圖,第九天圖一。我們定義一個指向二維數數的指針 

         int a[3][4];
         int *p;
         p=a;

  其實這也指向一維數組的指針完全沒有分別,二維數組因為是行優先的,一行下來就是列順序了,我們可以這樣來用指針指向列,如下: 

         p++;

  我們這里就是指向了第0行的第1列了,那么我們怎么可以到第下一行呢,其實定義數組時內存就給數組分配好一連串的連續空間,我們直接可以將指針繼續往下移,當移到了0行***一列時,加移的話就到了第1行了。其實C語言里還有一種更方面的指向方法,看如下:

        int (*p)[4] /*這里是定義一個數指針,而這個指針是指向有數組四個元素的指針*/

我們看看這種定義的方式,*p為什么一定要括號括住呢,因為[]這個運算符比*優先,如果不加括號的話就變成了定義另一個指針最,至于是什么指針在最面就會講到了,現在先來看看這種指針。 

         p=a;
         p++;

這樣會得到什么的結果呢?就是直接往下移一行了,這也是和前天說過的那個道理一樣,是按照定義的類型結合來到運算的。我們知道了如何可以移行,那么該怎么移列呢?這個問題又更復雜一點了,試著把指針移到第1行第2列看看。我們先來看看這個表達式代表什么吧,a+1 這就是***行的首地址吧,同理p+1也是指向***行的首地址。至于列呢?先想想一維數組是怎么移到列的,就是首地址加上列序吧!那么我們就可以先表達出一維數組的首地址先,*(p+1)+2,看,這樣是不是指向了***行第二列了呢。我們不可以簡單的理解(p+1)為行,從另一種意義上可以看成是列的首地址了(這里實在太難理解了,明還是有一點明,不過我還想用回自己一直對指針的理解好了,千萬不要綜合起來理解喔,這樣就太錯特錯了)。 

       好了說回了二維數組成的現在來看看還有其它的什么指針,字符指針是比較簡單的,不過也有它的一些特別之處。我們來看看以下的一些程序:
        char *p;
        p="ABC"; /*這里說說,既然是字符串就是一定有結束符的,這是和字符數組不同的*/
這樣的賦值是可以的,這里是將字符串ABC的首地址賦給指針p,下現再看看另一個程序:
        char a[4];
        a="ABC";
  這里有錯嗎?對于C語言來說是錯了的了,因為字符數組a是一個常量,不能給賦值。其它的高級語言就可以直接賦值給它就回事了,那么我們想把ABC賦給字符數組該怎么呢,這里有幾種方法,一種就是一個一個字符賦值,一種就是利用指針,不過這里還是用回C語言函數庫里的復制字符串函數完成strcpy();大家應該都對這個函數不默生吧,那好,現在就給五分鐘做做練習,編制一個類于strcpy()的函數。…………時間真的過得快,我把我做的寫出來吧。 

        mycpy(char *s1,char *s2)
          { for(;*s1++=*s2++; }
好了,就這么短短二行就完成了復制功能,這只有C語言才能做到的。
現在再來看看以下兩個程序吧 。

         char *p,*q; char *p,*q,*r;
         p="ABC"; r="ABC";
         q="ABC"; p=r;
         *q='D'; q=r;
         printf("%s",%s",p,q); *q='D';
         printf("%s,%s",p,q);

這里的答案是什么呢?自己先想想吧。

  好了,應該都想完了吧,現在就給出正確的答案,***條程序是輸出ABC,DBC,而第二條程序就是輸出DBC,DBC。這里為什么呢?其實是因為***個程序都是指向了同一個地址,那當然就是值一樣啦。

現在就剩下函數指針了,其實我們平常也不怎么多人,但是老師還是給我們講了一下,也提出了一個特別的地方,是今天我們才發現的,程序如下:

         int b=0;
         int a[2]={10,20};
         int *ab(int *p)
           {
               p++;
               return (p);
           }
         main()
           { 

               b=*ab(a); /*這里我們試著將調用的函數返回的地址再加*號,看看可不可以指到那個值,至于結果怎么樣,我們也沒有試過,我在寫這篇日記時也沒有上過機試,大家有興趣也試試吧,這個問題我們是怎么引出來的呢,其實我們一開始定義了一個指向函數的指針,就比如(*cd)()吧,我們提出了如果沒有了括號會怎么樣,因為本來(*cd)()就是指向一個返回指針值的函數,那么我們為了試驗所以另編一個返回地址的函數來試試*/
               printf("%d",b);
            }

  好了,今天就將指針講完了,不過指針的運用就還有很多在后面呢,就我知道的就有結構體和共用體還可以用到指針,跟著就是其它的一個綜合運用鏈表、堆棧、隊列等等的。我想我就是這方面還一點經驗都沒有吧,之前看了一下數據結構也沒有太大的興趣看下去了,因為我看到一大堆的指針都已經頭暈了。不過近幾天拿回來看看又好像明了些什么似的,反正就覺得不太頭暈了吧。

【相關文章】

  1. 程序員考試筆記九:C語言指針
  2. 程序員考試筆記八:諾漢塔的原理
責任編輯:丁小雨 來源: 51CTO
相關推薦

2009-01-07 21:03:53

程序員循環語句

2009-01-07 21:00:05

2009-01-19 19:18:44

程序員考試筆記

2009-01-08 21:25:51

程序員筆記

2009-01-10 23:38:16

程序員考試筆記

2009-01-08 21:21:45

程序員筆記

2009-01-05 15:56:00

軟考程序員

2012-09-28 10:09:35

程序員碼農謊言

2014-09-19 09:27:46

程序員

2011-04-15 10:51:47

程序員

2010-05-31 09:18:42

程序員文檔注釋

2013-05-30 09:55:51

程序員分歧程序員失業的程序員

2019-05-16 08:36:53

Eureka緩存網關

2013-08-20 09:33:59

程序員

2012-03-06 09:22:46

程序員

2015-05-25 11:16:23

2009-05-21 15:58:12

程序員工作經驗職場

2011-05-13 14:34:02

程序員

2019-08-19 08:42:44

程序員技能開發者

2013-07-12 10:58:16

程序員
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产乱码精品一区二三赶尸艳谈 | 欧美精品一区二区在线观看 | 日韩成人在线观看 | 99综合| 一区二区三区中文 | 伊人超碰 | 亚洲欧美中文日韩在线v日本 | 在线精品一区 | 亚洲国产成人精品女人久久久野战 | 成年网站在线观看 | 亚洲精品久久久一区二区三区 | 日韩另类视频 | 久久这里只有精品首页 | 激情影院久久 | 国产一区二区三区四区 | 日韩在线免费视频 | 毛片免费视频 | 久久国色 | 欧美一区久久 | 久草综合在线视频 | 黄色在线免费观看 | 日本一区高清 | 中文字幕一区二区三区精彩视频 | 精品一区二区不卡 | av网站在线免费观看 | 久久国产亚洲 | 欧美日韩高清在线一区 | 亚洲一二三区不卡 | 国产亚洲欧美另类一区二区三区 | 91视频国产精品 | 能看的av | 日韩在线欧美 | 日韩欧美手机在线 | 请别相信他免费喜剧电影在线观看 | 欧美日韩精品一区二区天天拍 | 欧美情趣视频 | 97伦理电影| 亚洲精品国产成人 | 在线观看免费高清av | 草久久| 精品免费国产一区二区三区四区 |