c語言指針和數組的聯系

c語言指針與數組

  • **一、指針與一維數組**
        • 1.一維數組的存儲方式
        • 2. 對一維數組名的理解
        • 3. 數組下標和指針的關系
        • 4.一位數組名與取數組首地址的區別
  • **二、指針與二維數組**
        • 1.二維數組的存儲方式
        • 2.二維數組下標和指針的對應關系
    • 例題:

懷著忐忑的心情寫了人生第一篇博客......誠惶誠恐......

主要內容:本篇博客主要是較為詳細的解釋指針與一維、二維數組的聯系

一、指針與一維數組


1.一維數組的存儲方式

  • 當我們定義了一個一維數組a時,編譯器就會根據數組a的類型和元素個數分配一定的內存空間(該內存單元一定是連續的),并且這個內存單元一旦分配,便不會改變。

2. 對一維數組名的理解

  • 單獨的一維數組名是一個指針常量,存放的是一維數組第一個元素的地址。 例:int a[2];
    對于數組a,如果我們單純只是調用數組名a,它代表著數組首個元素即a[0]的地址。

3. 數組下標和指針的關系

  • 對于數組a[i],它永遠等價于*(a+i)。

4.一位數組名與取數組首地址的區別

int array[5] = {1,2,3,4,5};
printf("%d  %d  %d",array,&array,&array[0]);
  • 由上述代碼的輸出結果我們可以知道array、&array與&array[0]的值是一樣的。但是其意義是完全不一樣的。array和&array[0]是一樣的,代表數組首元素的地址;而&array代表整個數組的首地址。
    分開來看,array是一個地址,它也可以看作為array+0,而*(array+0)又是數組第一個元素的內容,也就 是array[0],所以array就是下表為0的元素的地址。
    對于&array,它是變量array的地址,而變量array的偶用范圍是四個int空間,如果我們將&array賦給某 個變量p,那么p的類型應該是:int (*)[4]; 也就是指向包含4個int數據的數組的指針。
    之前看到過一個很通俗的例子:就像是陜西省政府在西安,而西安的市政府也在西安,兩個政府都在線,其 代表的意義卻完全不一樣。

二、指針與二維數組


1.二維數組的存儲方式

  • 按照先后的順序依次儲存,當把每一行看作一個整體,即視為一個大的數組元素時,這個存儲的二維數組也就變成了一個一維數組了。而每個大數組元素對應二維數組的一行,我們就稱之為數組元素,顯然每個行的數 組元素都是一個一維數組。

2.二維數組下標和指針的對應關系

對于 int a[3] [3],數組名a是數組首元素的地址。
&a代表整個數組,+1直接跳到數組末,是a升一級。
a是行行指針,+1跳到下一行。
*a是第一個數的指針,+1跳到下一個數。對于二維數組每一行都對應一個行地址,二維數組的地址就是第一行地址。
行地址:
a:第一行地址。
a+1:第二行地址
a+2:第二行地址
列地址:
a[0]+0:第一列地址
a[0]+1:第二列地址
a[0]+2:第二列地址

例題:

#include <stdio.h>
int main (void)
{int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};int * pa[3] = { a[0] , a[1] , a[2] };int *p = a[0];int i;for( i=0; i<3; i++ ){printf(" %d   %d  %d",a[i][2-i],*a[i],*(*(a+i)+i));	printf("\n");  //*(*(a+i)+i),a+i//是矩陣a的第i行的地址,*(a+i)將被求第i行的第一個元素的地址。*(a+i)+i將被求值為第i行的第i//個元素的地址。*(*(a+i)+i)將被求值為第i行中的第i個元素的int整數值。}for( i=0; i<3; i++ ){printf("%d   %d",*pa[i],p[i]);printf("\n");}return 0;
} 

結果:

a[i][2-i]  =  3   *a[i]  =  1   *(*(a+i)+i)  =  1
a[i][2-i]  =  5   *a[i]  =  4   *(*(a+i)+i)  =  5
a[i][2-i]  =  7   *a[i]  =  7   *(*(a+i)+i)  =  9
*pa[i]  =  1   p[i]  =  1
*pa[i]  =  4   p[i]  =  2
*pa[i]  =  7   p[i]  =  3

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/531316.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531316.shtml
英文地址,請注明出處:http://en.pswp.cn/news/531316.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android模擬器默認位置的修改

1.創建ANDROID_SDK_HOME環境變量&#xff0c;如ANDROID_SDK_HOMED:\eclipse_android\android-sdk 2.在ANDROID_SDK_HOME目錄下&#xff0c;建立.android目錄 3.默認的avd路徑是C:\Users\Administrator\.android, 將里面的內容放入到ANDROID_SDK_HOME中的.android目錄下 4.windo…

python 求出4行5列的二維數組周邊元素之和

題目:求出4行5列的二維數組周邊元素之和 代碼&#xff1a; import random x [[random.randint(1,10)for j in range(5)]for i in range(4)] for item in x:print(item) y [x[0][0],x[0][1],x[0][2],x[0][3],x[0][4],x[1][0],x[1][4],x[2][0],x[2][4],x[3][0],x[3][4]] prin…

android表白app

一、前言 馬上就要520和521了&#xff0c;是不是還有像我一樣的單身狗啊。我就知道有&#xff0c;所以這兩天簡單寫了這個小程序&#xff08;其實是替別人寫的&#xff09;&#xff0c;雖然我并不會用去騙女孩子&#xff08;因為最近太忙了&#xff0c;實習完之后要搞畢設&…

c語言:malloc函數的簡介

文章目錄一、為什么需要malloc函數&#xff1f;二、如何使用malloc函數&#xff1f;三、用malloc函數自定義數組長度一、為什么需要malloc函數&#xff1f; 用于解決傳統數組以下缺點。 ①傳統數組的長度必須要事先指定。 ②傳統數組的內存無法手動釋放。 ③傳統數組的長度定義…

webpack+react+es6開發模式

一、前言 實習了兩個月&#xff0c;把在公司用到的前端開發模式做個簡單的整理。公司里前端開發模式webpackreactreduxes6&#xff0c;這里去掉了redux。 webpack, react, redux等學習網址&#xff1a;http://www.cnblogs.com/hujunzheng/p/5405780.html 二、簡單的步驟條組件 …

c語言輸入字符時控制符%c前加空格的原因解釋

文章目錄一、前景知識1、緩沖區2、標準輸入流二、scanf語句的執行1、scanf對于整形%d的輸入2、scanf對于字符%c的輸入在編一個代碼時偶然間發現一個知識盲點…用scanf語句輸入字符時需要在控制符%c前加空格。在解釋相關這個原因前我們需要了解幾個相關知識點。 一、前景知識 1…

git命令分類圖

轉載于:https://www.cnblogs.com/hujunzheng/p/5560826.html

python中為什么沒有自增或者自減

在c語言和c中我們經常會用到自增或者自減的語句&#xff0c;但對于python中如果運用這種格式便會報錯…why&#xff1f; 一、預備知識 小整數池 python中為了提高儲存效率&#xff0c;對于int類型的整型變量的儲存&#xff0c;有一個專門的小整數池&#xff0c;它會存放-5到256…

數據結構算法模擬系統

一、前言 學習數據結構已經有很長時間了&#xff0c;加上之前搞過一段時間的ACM&#xff0c;雖然搞得并不怎么樣吧&#xff0c;但是喜歡的東西不能放棄&#xff0c;一直打算寫一個算法模擬系統&#xff0c;對常用的一些算法進行簡單的模擬&#xff0c;于是我的畢業設計就這樣誕…

python語言map函數及map object at 亂碼錯誤

文章目錄一、map函數的簡介1、map函數的作用2、語法格式3、舉例例1、例2、二、報錯一、map函數的簡介 1、map函數的作用 對某個序列以給定的函數格式作映射。 2、語法格式 map(function,iterable) ??function可以填函數&#xff0c;也可以填數據類型 3、舉例 例1、 a [1,2,…

推薦幾款jquery圖片切換插件

一、前言 畢業季到了&#xff0c;大家都在匆匆忙忙的記錄大學里最美好的時光&#xff0c;照片中各種花式、各種姿勢都涌現出來了。這么多的照片怎么展示出來給自己的好友看呢&#xff1f;有人選擇做成視頻&#xff0c;有人選擇ps之后做成圖片集&#xff0c;而我選擇利用靜態網頁…

c語言表白

馬上就要520了&#xff0c;不少小伙伴們一定開始想盡各種辦法進行表白了…那么身為奔跑在程序員道路上的我們也一定要有獨特的表白方法&#xff01; 下面是一段表白代碼&#xff0c;請直接搬去用吧&#xff01;&#xff01;&#xff01; #include <stdio.h> void change…

java注意的一些細節問題

1. 大括弧作用域問題 public static void main(String[] args) {{int x;{int x;//編譯錯誤&#xff1a;Duplicate local variable x}} } 2.boolean值的運算 public static void main(String[] args) {if(true && false) {}if(true & false) {}System.out.println(t…

python表白

馬上就要520了&#xff0c;不少小伙伴們一定開始想盡各種辦法進行表白了…那么身為奔跑在程序員道路上的我們也一定要有獨特的表白方法&#xff01; 下面是一段表白代碼&#xff0c;請直接搬去用吧&#xff01;&#xff01;&#xff01; import turtle import timedef hart_ar…

git revert和reset區別

1.在github上建立測試項目并克隆到本地 2.本地中新建兩個文本文件 3.將a.txt commit并push到遠程倉庫 執行 git add a.txt, git commit -m "a.txt", git push 4.將b.txt提交到本地倉庫&#xff0c;不執行push 通過gitk命令查看提交歷史如下&#xff1a; 情景&#xf…

python基礎知識點整理(1)

目錄一、變量與數據類型1、變量① 變量的命名規則2、字符串常用的庫函數二、列表1、列表的基礎定義2、列表常用的庫函數3、for循環與列表4、列表切片5、元組三、if語句四、字典1、字典定義2、對字典的操作一、變量與數據類型 1、變量 ① 變量的命名規則 只能包含數字、字母以…

sorl6.0+jetty+mysql搭建solr服務

1.下載solr 官網&#xff1a;http://lucene.apache.org/solr/ 2.目錄結構如下 3.啟動solr&#xff08;默認使用jetty部署&#xff09; 在path路徑下將 bin文件夾對應的目錄加入&#xff0c;然后輸入 solr start&#xff08;或者 solr start -p port&#xff0c;指定端口啟動&am…

Maven中安裝本地Jar包到倉庫中或將本地jar包上傳

摘要 maven install 本地jar命令格式 mvn install:install-file -DgroupId<group_name> -DartifactId<artifact_name> -Dversion<version_no> -Dfile<path_of_the_local_jar> -Dpackagingjar -DgeneratePomtrue 示例 mvn install:install-file -Dgroup…

二維碼登錄原理及生成與解析

一、前言 這幾天在研究二維碼的掃碼登錄。初來乍到&#xff0c;還有好多東西不懂。在網上看到有人寫了一些通過QRCode或者Zxing實現二維碼的生成和解碼。一時興起&#xff0c;決定自己親手試一試。本人是通過QRCode實現的&#xff0c;下面具體的說一下。 二、二維碼原理 基礎知…

knockout+echarts實現圖表展示

一、需要學習的知識 knockout, require, director, echarts, jquery。簡單的入一下門&#xff0c;網上的資料很多&#xff0c;最直接就是進官網校習。 二、效果展示 三、require的配置 require.config.js中可以配置我們的自定義模塊的加載。 require.config({baseUrl: ".&…