關於C語言的二維數組和指標注意的地方

來源:互聯網
上載者:User

今天,看了一下彩屏的驅動程式,在顯示字元的時候看到一段這樣的代碼,在江西理工大學朱兆琪的協助下,才意識到自己以前對數組指標的一個極大的誤區,下面總結一下吧!

1、首先是聲明變數

unsigned char *pFont;  unsigned char *FontTable[] = {(unsigned char *)FONT6x8,(unsigned char *)FONT8x8,(unsigned char *)FONT8x16};

2、然後就是這樣一段代碼

  pFont = (unsigned char *)FontTable[size];//pFont = FONT8x8,意思就是pFont = FONT8x8            // get the nColumns, nRows and nBytes  nCols = *pFont;//擷取首元素的列大小  nRows = *(pFont + 1);//擷取首元素的行大小  nBytes = *(pFont + 2);//擷取首元素的大小

3、還有就是這個數組也貼出來

const unsigned char FONT8x16[][16] = {0x08,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // columns, rows, num_bytes_per_char0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // space 0x20

注意:SIZE取2

接下來就是分析My Code了

1、這裡nCols = 0x08   nRows = 0x10  nBytes = 0x10  沒錯列印的就是數組FONT8X16的前三個元素

2、之前理解錯誤的就是覺得應該列印的是3個元素的地址。

3、首先FONT8X16是一個二維數組,它指向的是一個數組的首元素的地址,只不過這個首元素是一個數組

4、然後(unsigned char *)FONT8x16表示把首元素的地址轉化為一個字元型指標

5、接著  pFont = (unsigned char *)FontTable[size]  就是取這個字元型指標裡面的值,也就是得到了指標指向的二維數組的首元素(也就是一個數組),這還是一個地址!

6、最後 *pFont就是取得 二維數組首個元素(第一個一維數組)的首元素,也就是0x08,*(pFont+1)第二個元素0x10

7、那麼假如我們  *FONT8X16又表示的是什麼呢?這是表示取得二維數組首元素的地址,*(FONT8X16+1)表示第二個元素的地址

更形象的一個例子如下!

#include<stdio.h>int main(){int m,n =0;int a[][8] = {1,1,2,4,5,6,7,8,9};int *p = (int *)a;n = *(a+8);m = *(p+8);printf("%d\n%d\n",n,m);}

有機會還來回味回味

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.