激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C語言中二維數組指針的簡要說明

C語言中二維數組指針的簡要說明

2021-03-06 14:07Echo Jin C/C++

這篇文章主要介紹了C語言中二維數組指針的簡要說明,文章后也附送一個小練習題進行鞏固,需要的朋友可以參考下

C語言中,指針是一個復雜但又靈活多變的知識點,我們知道,在一維數組中,對于一個數組a[],*a,a,&a,都表示a的首地址,但如果與二維數組混合使用,就顯得更為復雜了。例如對于一個二維數組

?
1
2
3
a[2][4]={{1,2.3},{4,5,6}}
 
a+i,&a[i],*(a+i),a[i],

這四個表達式到底表示什么呢?

先告訴答案吧,其實這幾個表達式都是指向同一個地址的,也許你會很詫異,也會很疑惑,怎么會是這樣呢!!事實證明就是這樣的,

C語言中二維數組指針的簡要說明

C語言中,指針是一個復雜但又靈活多變的知識點,我們知道,在一維數組中,對于一個數組a[],*a,a,&a,都表示a的首地址,但如果與二維數組混合使用,就顯得更為復雜了。例如對于一個二維數組

?
1
2
3
a[2][4]={{1,2.3},{4,5,6}}
 
a+i,&a[i],*(a+i),a[i],

這四個表達式到底表示什么呢?

先告訴答案吧,其實這幾個表達式都是指向同一個地址的,也許你會很詫異,也會很疑惑,怎么會是這樣呢!!事實證明就是這樣的。

來看一道題目:

char **p,a[6][8]; 問p=a是否會導致程序在以后出現問題?為什么?

直接用程序說明:

?
1
2
3
4
5
6
7
8
#include<stdio.h>
 
void main()
{
  char **p,a[6][8];
  p = a;
  printf"\n");
}

編譯,然后就會發現通不過,報錯:錯誤 1 error C2440: “=”: 無法從“char [6][8]”轉換為“char **”

于是乎,我看了下《C專家編程》里10.5節—使用指針向函數傳遞一個多維數組。

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

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

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

    int類型數據的數組。

方法三,創建一個一維數組,數組中的元素是指向其他東西的指針,也即二級指針。函數是 int fun(int **arr);這種方法可以動態處理各行各列不一樣長度的數據。

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
#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專家編程》10.3節的小啟發里講的很透徹:(以下這段文字及對比一定要認真分析!)

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

“數組名被改寫成一個指針參數”規則并不是遞歸定義的。數組的數組會被改寫成“數組的指針”,而不是“指針的指針”:

C語言中二維數組指針的簡要說明

下面再看一個網友的一段分析相當給力的代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#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是一個指向 int [3] 的指針,即ptr的類型和&arr1的類型是一樣的,注意:arr1指向的內存區域定長
  int ptr1[3][3]={{1,2,3},{1,2,3},{1,2,3}};
  // ptr2是一個指向 int * 的指針,即ptr2的類型和&ptr是一樣的,注意:ptr指向的內存區域不定長
  int * ptr2[3]={arr1,arr2,arr3};
  // ptr3是一個指向 int [3] 的指針,即ptr3的類型和&arr1的類型是一樣的,注意:arr1指向的內存區域定長
  int(* ptr3)[3]=&arr1;
  ptr3=ptr1; // 沒錯,他們的類型相同
 // ptr3=ptr2;//error 無法從“int *[3]”轉換為“int (*)[3]
 // ptr4是一個指向 int * 的指針,即ptr4的類型和&ptr是一樣的,注意:ptr指向的內存區域不定長
  int ** ptr4;
  //ptr4=&arr1; //error 無法從“int (*)[3]”轉換為“int **
  ptr4=ptr2; // 沒錯,他們的類型相同
 //ptr4=ptr3; // error 無法從“int (*)[3]”轉換為“int **
  return 0;
}

延伸 · 閱讀

精彩推薦
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
主站蜘蛛池模板: 成人久久久精品乱码一区二区三区 | 女人解衣喂奶电影 | 国产精品jk白丝蜜臀av软件 | 在线成人免费视频 | 精精国产xxxx视频在线播放7 | 久久精品中文字幕 | 欧美一区二区三区免费不卡 | 牛牛a级毛片在线播放 | 久久久婷婷一区二区三区不卡 | 国产成年免费视频 | 中文字幕在线免费 | 国产成人高清成人av片在线看 | 看片一区二区三区 | 亚洲性视频 | 中文字幕免费在线看 | 男女生羞羞视频网站在线观看 | 久久国产精品二国产精品 | 久久探花 | 欧美日韩在线视频一区 | av电影观看 | 国产麻豆交换夫妇 | 性片网站 | 精品国产一区二区在线观看 | 91精品国产日韩91久久久久久360 | 一级尻逼视频 | 亚洲国产超高清a毛毛片 | 日韩精品无码一区二区三区 | 成人一级片毛片 | 欧美日性| 一级毛片真人免费播放视频 | 免费国产一级淫片 | 91九色丨porny丨国产jk | 91九色免费视频 | 一区二区三区四区精品 | 精品国产99久久久久久宅男i | h网站在线观看 | 91九色蝌蚪国产 | 国产色片在线观看 | 国产欧美日韩二区 | 久国久产久精永久网页 | 成年人在线视频免费 |