最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言中二維數(shù)組指針的簡(jiǎn)要說(shuō)明

 更新時(shí)間:2015年08月10日 16:44:12   作者:Echo Jin  
這篇文章主要介紹了C語(yǔ)言中二維數(shù)組指針的簡(jiǎn)要說(shuō)明,文章后也附送一個(gè)小練習(xí)題進(jìn)行鞏固,需要的朋友可以參考下

C語(yǔ)言中,指針是一個(gè)復(fù)雜但又靈活多變的知識(shí)點(diǎn),我們知道,在一維數(shù)組中,對(duì)于一個(gè)數(shù)組a[],*a,a,&a,都表示a的首地址,但如果與二維數(shù)組混合使用,就顯得更為復(fù)雜了。例如對(duì)于一個(gè)二維數(shù)組

 a[2][4]={{1,2.3},{4,5,6}}

 a+i,&a[i],*(a+i),a[i],

這四個(gè)表達(dá)式到底表示什么呢?

先告訴答案吧,其實(shí)這幾個(gè)表達(dá)式都是指向同一個(gè)地址的,也許你會(huì)很詫異,也會(huì)很疑惑,怎么會(huì)是這樣呢??!事實(shí)證明就是這樣的,

2015810163408432.jpg (205×93)

C語(yǔ)言中,指針是一個(gè)復(fù)雜但又靈活多變的知識(shí)點(diǎn),我們知道,在一維數(shù)組中,對(duì)于一個(gè)數(shù)組a[],*a,a,&a,都表示a的首地址,但如果與二維數(shù)組混合使用,就顯得更為復(fù)雜了。例如對(duì)于一個(gè)二維數(shù)組

 a[2][4]={{1,2.3},{4,5,6}}

 a+i,&a[i],*(a+i),a[i],

這四個(gè)表達(dá)式到底表示什么呢?

先告訴答案吧,其實(shí)這幾個(gè)表達(dá)式都是指向同一個(gè)地址的,也許你會(huì)很詫異,也會(huì)很疑惑,怎么會(huì)是這樣呢??!事實(shí)證明就是這樣的。

來(lái)看一道題目:

char **p,a[6][8]; 問(wèn)p=a是否會(huì)導(dǎo)致程序在以后出現(xiàn)問(wèn)題?為什么?

直接用程序說(shuō)明:

#include<stdio.h>

void main()
{
  char **p,a[6][8];
  p = a;
  printf("\n");
}

編譯,然后就會(huì)發(fā)現(xiàn)通不過(guò),報(bào)錯(cuò):錯(cuò)誤 1 error C2440: “=”: 無(wú)法從“char [6][8]”轉(zhuǎn)換為“char **”

于是乎,我看了下《C專(zhuān)家編程》里10.5節(jié)—使用指針向函數(shù)傳遞一個(gè)多維數(shù)組。

方法一,函數(shù)是 void fun(int arr[2][3]); 這種方法只能處理2行3列的int型數(shù)組。

方法二,可以省略第一維的長(zhǎng)度。函數(shù)是 void fun(int arr[][3]);這種方式雖然限制寬松了一些,但是還是只能處理每行是3個(gè)整數(shù)長(zhǎng)度的數(shù)組。

    或者寫(xiě)成這種形式 void fun(int (*arr)[3]);這是一個(gè)數(shù)組指針或者叫行指針,arr和*先結(jié)合使得arr成為一個(gè)指針,這個(gè)指針指向具有3個(gè)

    int類(lèi)型數(shù)據(jù)的數(shù)組。

方法三,創(chuàng)建一個(gè)一維數(shù)組,數(shù)組中的元素是指向其他東西的指針,也即二級(jí)指針。函數(shù)是 int fun(int **arr);這種方法可以動(dòng)態(tài)處理各行各列不一樣長(zhǎng)度的數(shù)據(jù)。

注意:只有把二維數(shù)組改成一個(gè)指向向量的指針數(shù)組的前提下才可以這么做!比如下面的程序可以正常輸出abc:

#include <iostream> 
using namespace std; 
void test(char **ptr) 
{ 
  cout << *ptr << endl; 
} 
 
int main() 
{ 
  char *p[3] = {"abc", "def", "ghi"}; 
  test(p); 
  return 0; 
}

在《C專(zhuān)家編程》10.3節(jié)的小啟發(fā)里講的很透徹:(以下這段文字及對(duì)比一定要認(rèn)真分析?。?/p>

數(shù)組和指針參數(shù)是如何被編譯器修改的?

“數(shù)組名被改寫(xiě)成一個(gè)指針參數(shù)”規(guī)則并不是遞歸定義的。數(shù)組的數(shù)組會(huì)被改寫(xiě)成“數(shù)組的指針”,而不是“指針的指針”:

2015810163503937.jpg (543×184)

下面再看一個(gè)網(wǎng)友的一段分析相當(dāng)給力的代碼:

#include "stdafx.h" 
#include <iostream> 
using namespace std; 
 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
  int arr1[3]; 
  int arr2[3]; 
  int arr3[3]; 
  int * ptr; 
  // ptr1是一個(gè)指向 int [3] 的指針,即ptr的類(lèi)型和&arr1的類(lèi)型是一樣的,注意:arr1指向的內(nèi)存區(qū)域定長(zhǎng) 
  int ptr1[3][3]={{1,2,3},{1,2,3},{1,2,3}}; 
  // ptr2是一個(gè)指向 int * 的指針,即ptr2的類(lèi)型和&ptr是一樣的,注意:ptr指向的內(nèi)存區(qū)域不定長(zhǎng) 
  int * ptr2[3]={arr1,arr2,arr3}; 
  // ptr3是一個(gè)指向 int [3] 的指針,即ptr3的類(lèi)型和&arr1的類(lèi)型是一樣的,注意:arr1指向的內(nèi)存區(qū)域定長(zhǎng) 
  int(* ptr3)[3]=&arr1; 
  ptr3=ptr1; // 沒(méi)錯(cuò),他們的類(lèi)型相同 
 // ptr3=ptr2;//error 無(wú)法從“int *[3]”轉(zhuǎn)換為“int (*)[3] 
 // ptr4是一個(gè)指向 int * 的指針,即ptr4的類(lèi)型和&ptr是一樣的,注意:ptr指向的內(nèi)存區(qū)域不定長(zhǎng) 
  int ** ptr4; 
  //ptr4=&arr1; //error 無(wú)法從“int (*)[3]”轉(zhuǎn)換為“int ** 
  ptr4=ptr2; // 沒(méi)錯(cuò),他們的類(lèi)型相同 
 //ptr4=ptr3; // error 無(wú)法從“int (*)[3]”轉(zhuǎn)換為“int ** 
  return 0; 
}


相關(guān)文章

  • C語(yǔ)言位運(yùn)算符的具體使用

    C語(yǔ)言位運(yùn)算符的具體使用

    位運(yùn)算是指按二進(jìn)制進(jìn)行的運(yùn)算。在系統(tǒng)軟件中,常常需要處理二進(jìn)制位的問(wèn)題。本文就詳細(xì)的介紹一下,感興趣的可以了解一下
    2021-09-09
  • Qt實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出到xls的示例代碼

    Qt實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出到xls的示例代碼

    導(dǎo)入導(dǎo)出數(shù)據(jù)到csv由于語(yǔ)法簡(jiǎn)單,適用場(chǎng)景有限,于是本文將為大家介紹Qt如何實(shí)現(xiàn)導(dǎo)出數(shù)據(jù)到xls,感興趣的小伙伴可以跟隨小編一起試一試
    2022-01-01
  • C語(yǔ)言每日練習(xí)之求兩個(gè)矩陣的乘積詳解

    C語(yǔ)言每日練習(xí)之求兩個(gè)矩陣的乘積詳解

    這篇文章主要介紹了如何求兩個(gè)矩陣的乘積,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11
  • 實(shí)例講解C語(yǔ)言編程中的結(jié)構(gòu)體對(duì)齊

    實(shí)例講解C語(yǔ)言編程中的結(jié)構(gòu)體對(duì)齊

    這篇文章主要介紹了C語(yǔ)言編程中的結(jié)構(gòu)體對(duì)齊,值得注意的是一些結(jié)構(gòu)體對(duì)齊的例子在不同編譯器下結(jié)果可能會(huì)不同,需要的朋友可以參考下
    2016-04-04
  • C語(yǔ)言常見(jiàn)排序算法之插入排序(直接插入排序,希爾排序)

    C語(yǔ)言常見(jiàn)排序算法之插入排序(直接插入排序,希爾排序)

    這篇文章介紹C語(yǔ)言常見(jiàn)排序算法之插入排序(直接插入排序,希爾排序),主要分享介紹的是插入排序的兩種常用算法,直接插入排序和希爾排序,需要的朋友可以參考一下
    2022-07-07
  • C/C++中棧(stack)&堆(heap)詳解及其作用介紹

    C/C++中棧(stack)&堆(heap)詳解及其作用介紹

    這篇文章主要介紹了C/C++中棧(stack)&堆(heap)詳解及其作用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • C++中類(lèi)的成員函數(shù)及內(nèi)聯(lián)函數(shù)使用及說(shuō)明

    C++中類(lèi)的成員函數(shù)及內(nèi)聯(lián)函數(shù)使用及說(shuō)明

    這篇文章主要介紹了C++中類(lèi)的成員函數(shù)及內(nèi)聯(lián)函數(shù)使用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C/C++中智能指針的用法詳解

    C/C++中智能指針的用法詳解

    C/C++中,指針是一個(gè)非常重要的概念,其強(qiáng)大但也麻煩,麻煩之處就在于一旦你申請(qǐng)了內(nèi)存,那就必須要手動(dòng)去釋放內(nèi)容,否則就會(huì)造成內(nèi)存泄漏。所以智能指針的作用就是防止我們麻痹大意忘記釋放內(nèi)存,幫助我們管理內(nèi)存的,本文就來(lái)聊聊智能指針的用法
    2023-01-01
  • 詳解C++中的雙冒號(hào) ::

    詳解C++中的雙冒號(hào) ::

    這篇文章主要介紹了C++中的雙冒號(hào) ::,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-09-09
  • C++中關(guān)于set刪除的一些坑

    C++中關(guān)于set刪除的一些坑

    這篇文章主要介紹了C++中關(guān)于set刪除的一些坑,因?yàn)檫@個(gè)問(wèn)題浪費(fèi)了很多的時(shí)間,所以想著分享出來(lái)給大家,方便同樣遇到這個(gè)問(wèn)題的朋友們,有需要的朋友們下面來(lái)一起看看吧。
    2017-02-02

最新評(píng)論

遂昌县| 景洪市| 辛集市| 西峡县| 永兴县| 古交市| 沈丘县| 凤山市| 广平县| 吴桥县| 华宁县| 嘉善县| 米易县| 绿春县| 壶关县| 宝山区| 遂昌县| 元谋县| 蛟河市| 米脂县| 襄垣县| 许昌县| 博白县| 遂宁市| 云梦县| 阳原县| 行唐县| 淮安市| 富顺县| 揭西县| 阳城县| 沾益县| 怀来县| 六枝特区| 齐齐哈尔市| 义马市| 杭锦旗| 惠安县| 东丰县| 台江县| 青岛市|