国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

服務器之家 - 編程語言 - C/C++ - C++數組指針和二維數組詳情

C++數組指針和二維數組詳情

2022-02-16 16:08學渣的C/C++ C/C++

這篇文章主要介紹了C++數組指針和二維數組,指針數組和二維數組在應用中常用于函數傳參,下面我們就來看看指針數組和二維數組在應用中的具體使用吧,需要的朋友可以參考一下

1、二維數組

對于一維數組,int arr[10]; arr是數組名,也是首元素的地址,&arr是數組的地址,那么對于二維數組 int arr[3][3], arr可以肯定是數組名,那么他是不是首元素的地址呢?如果是首元素的地址,那么arr[0]又該是什么呢?通過以下代碼進行驗證:

#include <stdio.h>
#define ROW 3
#define COLUMN 3
int main()
{
  int arr[ROW][COLUMN] = {0};
  printf("arr = %p\n", arr);
  printf("arr[0] = %p\n", arr[0]);
  printf("&arr[0][0] = %p\n", &arr[0][0]);
  printf("\n\n");
  
  printf("arr + 1 = %p\n", arr + 1);
  printf("arr[0] + 1 = %p\n", arr[0] + 1);
  printf("&arr[0][0] + 1 = %p\n", &arr[0][0] + 1);
  printf("&arr[0][1]  = %p\n", &arr[0][1]);
  return 0;
}

代碼運行的結果為:

C++數組指針和二維數組詳情

可以發現,雖然arr = arr[0] = &arr[0][0],但是,arr[0] + 1 = &arr[0][0] + 1 = &arr[0][1] != arr + 1, 可以說明arr并不是arr[0][0]的地址,而是arr[0]的地址。那么二維數組中,arr還是首元素的地址嗎?答案是:是的,arr是首元素的地址,只是二維數組中的首元素不是arr[0][0] ,而是arr[0]。而arr[0]又是一個一維數組,所以arr是首元素的地址是數組的地址,因此可以通過數組指針來保存arr。

那么對于,int arr[3][5]這樣一個二維數組,應該怎樣定義一個數組指針來保存arr呢?也就是―― = arr; ――下劃線處應該填寫什么呢?

答案是:int (*parr)[5] = arr; 因為arr是一個二維數組,他的首元素是一個保存有5個int元素的數組,arr是數組首元素的地址,所以arr是一個數組的地址,數組保存的數據類型為int型,元素有5個。

那么 int (*parr[2])[3]應該表示什么呢? 首先在()內[ ]優先級高,所以parr是一個數組,有2個元素,()里面還有還有*,所以數組的元素為數組指針,數組指針指向的數組有3個元素,每個元素是int類型。

代碼驗證如下:

#include <stdio.h>
int main()
{
  int arr1[3] = {1,2,3};
  int arr2[3] = {2,3,4};
  int (*parr[2])[3] = {&arr1, &arr2};
  printf("&arr1 = %p\n&arr2 = %p\n",&arr1,&arr2);
  for (int i = 0; i < 2; i++) {
      printf("parr[%d] = %p\n",i,parr[i]);
  }
  return 0;
}

運行結果為:

C++數組指針和二維數組詳情

 

2、數組指針和二維數組

再次強調一下,int arr[2][3],這個二維數組的首元素是arr[0] ,arr[0]是一個一維數組,arr是首元素的地址,就是一個數組指針,所以,int (*parr) [3] = arr; 這也是為什么二維數組定義的時候可以不給出行元素的個數,但是一定要給出列元素的個數。

#include <stdio.h>
int main()
{
  int arr[][3] = {{1,2,3},{1,2,3}}; //正確定義
  int arr[2][] = {{1,2,3},{1,2,3}}; //錯誤定義
  return 0;
}

指針數組和二維數組在應用中常用于函數傳參,如我們不用數組指針來實現一個二維數組的值修改函數,

代碼如下:

#include <stdio.h>
#define ROW 2
#define COLUMN 3
void arrReset(int arr[ROW][COLUMN], int row, int col) {for (int i = 0; i < row; i++) {
      for (int j = 0; j < col; j++) {
          arr[i][j] = 0;
      }
  }
}
int main()
{
  int arr[ROW][COLUMN] = {{1,2,3},{1,2,3}}; 
  arrReset(arr, ROW, COLUMN);
  for (int i = 0; i < ROW; i++) {
      for (int j = 0; j < COLUMN; j++) {
          printf("%d ", arr[i][j]);
      }
      printf("\n");
  }
  
  return 0;
}

以上代碼函數傳參是通過數組的形式實現,代碼運行結果為:

C++數組指針和二維數組詳情

二維數組函數傳參也通常通過指針去傳遞,以方便讀寫操作,下面給出指針形式傳參的方式:

1 #include <stdio.h>
2 #define ROW 2
3 #define COLUMN 3
4 void arrReset(int(*parr)[COLUMN], int row, int col) { 
5     for (int i = 0; i < row; i++) {
6         for (int j = 0; j < col; j++) {
7             //以下8-11行代碼是等價的
8             //parr[i][j] = 0;
9             //(*(parr + i))[j] = 0;
10             // *(*(parr + i) + j) = 0;
11             *(parr[i] + j) = 0;
12         }
13     }
14 }
15 int main()
16 {
17     int arr[ROW][COLUMN] = {{1,2,3},{1,2,3}}; 
18     arrReset(arr, ROW, COLUMN);
19     for (int i = 0; i < ROW; i++) {
20         for (int j = 0; j < COLUMN; j++) {
21             printf("%d ", arr[i][j]);
22         }
23         printf("\n");
24     }
25     
26     return 0;
27 }

可以發現代碼8-11行為等價代碼,這與上一篇數組指針和指針數組 - 學渣的C/C++ - 博客園 (cnblogs.com)博客中的指針數組訪問數組元素的例子相同,其實,確實可以這樣理解,訪問二維數組的時候就是訪問一個存放一維數組的一維數組。但是要注意,是訪問二維數組的元素時候,可以這樣理解,定義的時候不能這樣理解,因為一個是二維數組,一個是一維數組,

如以下錯誤代碼:

1 #include <stdio.h>
2 int main()
3 {
4     int arr1[3] = {1,2,3};
5     int arr2[3] = {4,5,6};
6     int* arr3[2] = {arr1, arr2};
7     int arr4[2][3] = arr3; //錯誤代碼
8     
9     return 0;
10 }

到此這篇關于C++數組指針和二維數組的文章就介紹到這了,更多相關數組指針和二維數組內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/qin6666/p/15473453.html

延伸 · 閱讀

精彩推薦
  • C/C++C++之重載 重定義與重寫用法詳解

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

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

    青山的青6062022-01-04
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

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

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

    spring-go5642021-07-02
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

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

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

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

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

    jia150610152021-06-07
  • C/C++學習C++編程的必備軟件

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

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

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

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

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

    源之緣11542021-10-27
  • C/C++深入理解goto語句的替代實現方式分析

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

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

    C語言教程網7342020-12-03
  • C/C++C語言中炫酷的文件操作實例詳解

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

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

    針眼_6702022-01-24
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 精品国产一区二区三区日日嗨 | 最新电影在线高清免费完整观看视频 | 国产欧美综合视频 | 色偷偷888欧美精品久久久 | 丁香六月av| 久久综合九色综合欧美狠狠 | 成人综合av | 日本一区二区中文字幕 | 美女毛片| 日韩在线视频观看 | 久久69精品久久久久久久电影好 | 国产精品久久久久久 | 成人午夜精品久久久久久久3d | 亚洲精品一区在线观看 | 中文字幕av第一页 | 波多野结衣先锋影音 | 91中文字幕在线观看 | 国产一区二区三区视频在线观看 | 黄p在线看 | 欧美日韩a | 欧美一级二级三级视频 | 福利社午夜影院 | 久久99精品视频 | 国产高清在线精品一区二区三区 | 亚洲视频二区 | 国产精品久久久久免费 | 色悠悠视频| 日韩中文视频 | 国产一区二区三区久久久 | 久久久久久久久久久网站 | 91麻豆精品国产91久久久久久久久 | a毛片国产 | 欧美黑人性暴力猛交喷水黑人巨大 | 国产精品一区二区不卡 | 日韩码有限公司在线观看 | 国产一区二区免费 | 久久国产免费 | 午夜视频在线看 | 干片网 | 日韩中文字幕在线免费观看 | 久久久久久久国产精品视频 |