欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關于C語言中的指針與二維數(shù)組

 更新時間:2023年07月24日 11:09:37   作者:coder_7  
這篇文章主要介紹了關于C語言中的指針與二維數(shù)組,C語言中,指針是一個復雜但又靈活多變的知識點,我們知道,在一維數(shù)組中,對于一個數(shù)組a[],*a,a,&a,都表示a的首地址,但如果與二維數(shù)組混合使用,就顯得更為復雜了,需要的朋友可以參考下

引言

本文探討的是如何通過指針訪問二維數(shù)組中的元素,以及二維數(shù)組如何在內存中存儲

指向一維數(shù)組的指針:

我們先來看下如何通過指針訪問一維數(shù)組

#include <stdio.h>
int main(){
	int arr[] = {4, 3, 2, 1};
    // 由于數(shù)組名是第一個元素的指針,對數(shù)組名進行解引用(*arr:此操作稱為解引用)就能拿到第一個元素
	printf("*arr=%d  arr[0]=%d\n", *arr, arr[0]);
    // 對指針+1就能拿到第二個元素的指針,依次類推
	printf("*(arr+1)=%d  arr[1]=%d\n", *(arr+1), arr[1]);
	return 0;
}

二維數(shù)組的存儲形式:

c中的二維數(shù)組其實是一維數(shù)組的線性擴展,二維數(shù)組在內存中其實是以一維的形式存儲。

比如:int arr[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}} 在內存中的存儲格式如下:

arr[0]arr[1]arr[2]

                                                   ⇓            

123456789101112

指向二維數(shù)組的指針:

在c語言中我們可以把二維數(shù)組看作一維數(shù)組來處理,只不過這個數(shù)組的元素也是數(shù)組。比如:arr[3,4] 我們可以認為這個數(shù)組由三個一維子數(shù)組構成,而這三個一維數(shù)組都包含了4個元素

在一維數(shù)組中數(shù)組名就是第一個元素的指針,當我們將二維數(shù)組看作一個一維數(shù)組時,我們就可以推出:數(shù)組名是前n個元素組成的數(shù)組的指針(arr[3][4] n的值就是4)

請看下面例子:

#include <stdio.h>
int main(){
    int arr[3][4] = {0};
    printf("sizeof(int):%d\n", sizeof(int));	//sizeof(int):4
    printf("arr:%p",arr);		// arr:000000000062FDE0
    printf("arr+1:%p",arr+1); 	// arr+1:000000000062FDF0
    return 0;
}

在這里插入圖片描述

地址結果相減我們可以得出10,但這是16進制的結果,轉為10進制結果就是16。由于int類型占4個字節(jié),我們可以得出arr與arr+1相差了4個元素,把二維數(shù)組的看作一維數(shù)組那么這里元素之間的跨度就是4個元素(4*4=16個字節(jié))。由此得出 arr 指向的是第一個子數(shù)組的指針,arr+1 指向的是第二個子數(shù)組的指針 …

既然 arr 指向的是第一個子數(shù)組的指針,那么 *arr(解引用) 的值就是第一個子數(shù)組的地址,更確切的說 *arr 是第一個子數(shù)組的第一個元素的地址,只有 **arr (雙重解引用)才能拿到第一個子數(shù)組的第一個元素的值。

我們看如下代碼:

#include <stdio.h>
int main(){
	int arr[3][4] = {
		{1,2,3,4},
		{5,6,7,8},
		{9,10,11,12}
	};
    // 打印結果發(fā)現(xiàn) *arr == &arr[0][0],又一次證明arr指向“第一個子數(shù)組”
	printf("*arr = %p  &arr[0][0] = %p\n", *arr, &arr[0][0]);
	printf("**arr = %d  arr[0][0] = %d\n", **arr, arr[0][0]);
	printf("*(*arr+1) = %d  arr[1][0] = %d\n", *(*arr+1), arr[0][1]);
	printf("**(arr+1) = %d  arr[0][0] = %d\n", **(arr+1), arr[1][0]);
	return 0;
}

這樣的做法就是通過指針來拿數(shù)組中的元素,與下標獲取數(shù)組元素的結果是一致的。

測試題:

int arr[3][4] = {
	{1,2,3,4},
	{5,6,7,8},
	{9,10,11,12}
};
// 輸出下面的結果
printf("*(*(arr+1)+1) = %d\n", *(*(arr+1)+1) );
printf("*(*(arr[2])+1) = %d \n",*(*(arr[2])+1) );

到此這篇關于關于C語言中的指針與二維數(shù)組的文章就介紹到這了,更多相關指針與二維數(shù)組內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++右值引用與移動構造函數(shù)基礎與應用詳解

    C++右值引用與移動構造函數(shù)基礎與應用詳解

    左值和右值都是針對表達式,左值是指表達式結束后依然存在的持久對象,右值是指表達式結束時就不再存在的臨時對象,下面這篇文章主要給大家介紹了關于C++11右值引用和移動語義的相關資料,需要的朋友可以參考下
    2023-02-02
  • 基于Matlab繪制洛倫茲吸引子相圖

    基于Matlab繪制洛倫茲吸引子相圖

    洛倫茲吸引子(Lorenz attractor)是由MIT大學的氣象學家Edward Lorenz在1963年給出的。本文將利用Matlab實現(xiàn)洛倫茲吸引子相圖的繪制,感興趣的可以了解一下
    2022-04-04
  • 舉例解析設計模式中的工廠方法模式在C++編程中的運用

    舉例解析設計模式中的工廠方法模式在C++編程中的運用

    這篇文章主要介紹了設計模式中的工廠方法模式在C++編程中的運用,文中也對簡單工廠模式和工廠方法模式進行了簡單的對比,需要的朋友可以參考下
    2016-03-03
  • C++ 類this及返回自身對象的引用方式

    C++ 類this及返回自身對象的引用方式

    這篇文章主要介紹了C++ 類this及返回自身對象的引用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語言 運算符詳細介紹及示例代碼

    C語言 運算符詳細介紹及示例代碼

    本文介紹C語言 運算符,這里整理了運算符的基礎知識,并附示例代碼,希望能幫助剛剛開始學習 C語言的同學
    2016-08-08
  • C++標準模板庫string類的介紹與使用講解

    C++標準模板庫string類的介紹與使用講解

    今天小編就為大家分享一篇關于C++標準模板庫string類的介紹與使用講解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • C/C++線程退出的四種方法小結

    C/C++線程退出的四種方法小結

    本文主要介紹了C/C++線程退出的四種方法小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • Cocos2d-x人物動作類實例

    Cocos2d-x人物動作類實例

    這篇文章主要介紹了Cocos2d-x人物動作類實例,本文用大量代碼和圖片講解Cocos2d-x中的動作,代碼中同時包含大量注釋說明,需要的朋友可以參考下
    2014-09-09
  • C++中sting類的簡單實現(xiàn)方法

    C++中sting類的簡單實現(xiàn)方法

    這篇文章主要介紹了C++中sting類的簡單實現(xiàn)方法的相關資料,需要的朋友可以參考下
    2016-08-08
  • C++項目求Fibonacci數(shù)列的參考解答

    C++項目求Fibonacci數(shù)列的參考解答

    今天小編就為大家分享一篇關于C++項目求Fibonacci數(shù)列的參考解答,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02

最新評論