1. 程式人生 > >函式指標和指標函式,陣列指標和指標陣列(糾結的指標啊

函式指標和指標函式,陣列指標和指標陣列(糾結的指標啊

}

2、指標函式 指標函式是指返回值是指標的函式,即本質是函式,定義格式如下:返回型別標示符 *函式名稱(形式引數){函式體}
例題:
#include <iostream> using namespace std; float *find(float (*p)[4],int m){ //p為陣列指標,這樣問題又來了,下面會研究陣列指標 float *pf = NULL; pf = *(p+m);//p是指向二維陣列的指標,加*取一維陣列的指標 return pf; }  int main(){ float *find(float (*p)[4],int);//查詢序號為m的學生的四門課程成績 float score[3][4] = {{50,51,52,55},{70,70,40,80},{77,99,88,67}};//定義成績陣列 float *pf = NULL;//定義指標時一定要初始化 int i,m; cout<<"請輸入學生的序號"<<endl; cin>>m; pf = find(score,m); for(i=0;i<4;i++){    cout<<*(pf+i)<<" "<<endl; } system("pause"); } 
 3、陣列指標:也稱行指標,定義:int (*p)[n];
 ()優先順序高,首先說明p是一個指標,指向一個整形的一維陣列,這個一維陣列的長度是n,也可以說是P的步長,也就是執行 P+1時,p要跨過n個整形資料的長度。
如要將二維陣列付給指標,英這樣賦值:
int a[3][4];

int (*p)[4]; //該語句是定義一個數組指標,指向含4個元素的一維陣列。
 p=a;        //將該二維陣列的首地址賦給p,也就是a[0]或&a[0][0]
 p++;       //該語句執行過後,也就是p=p+1;p跨過行a[0][]指向了行a[1][]
所以陣列指標也稱指向一維陣列的指標,亦稱行指標。
4、指標陣列:

定義 int *p[n];
[]優先順序高,先與p結合成為一個數組,再由int*說明這是一個整型指標陣列,它有n個指標型別的陣列元素。這裡執行p+1是錯誤的,這樣賦值也是錯誤的:p=a;因為p是個不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它們分別是指標變數可以用來存放變數地址。但可以這樣 *p=a; 這裡*p表示指標陣列第一個元素的值,a的首地址的值。
如要將二維陣列賦給一指標陣列:
int *p[3];
int a[3][4];
for(i=0;i<3;i++)
p[i]=a[i];
這裡int *p[3] 表示一個一維陣列記憶體放著三個指標變數,分別是p[0]、p[1]、p[2]
所以要分別賦值。

這樣陣列指標和指標陣列的區別就豁然開朗了,陣列指標只是一個指標變數,似乎是C語言裡專門用來指向二維陣列的,它佔有記憶體中一個指標的儲存空間。指標陣列是多個指標變數,以陣列形式存在記憶體當中,佔有多個指標的儲存空間。
還需要說明的一點就是,同時用來指向二維陣列時,其引用和用陣列名引用都是一樣的。
比如要表示陣列中i行j列一個元素:

*(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j] 
參考:
http://www.cnblogs.com/hongcha717/archive/2010/10/24/1859780.html
  
http://baike.sogou.com/v7627909.htm 

相關推薦

C++的拷貝建構函式、operator=運算子過載深拷貝淺拷貝、explicit關鍵字

1、在C++編碼過程中,類的建立十分頻繁。 簡單的功能,當然不用考慮太多,但是從進一步深刻理解C++的內涵,類的結構和用法,編寫更好的程式碼的角度去考慮,我們就需要用到標題所提到的這些內容。 最近,在看單例模式,覺得十分有趣,然而如果想要掌握單例模式,就必須掌握這些內容。下

高頻率呼叫的函式一定要保證最優化慎用除法餘數轉)

 在近期優化系統的過程中,發現有個函式在高壓力下,竟然佔用13.3%的時間,這個函式內部很簡單,基本就是這樣: id_to_type(id) {       int iIndex = id%150000;       return g_data[iIndex].c

用C語言中的函式列印乘法口訣表行數列數可以任意輸入

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> void print_table(int line) { int i = 0;

函式返回多個值傳入引數傳出引數

 函式包括了除函式名以外還有返回值和形參。   這個形參包括了傳入引數和傳出引數;   傳入引數:就是數值的傳遞。在函式中不會修改這個引數,不會修改呼叫這個函式的函式的值。   例如   void e

django 一對多的添加記錄create save 方法update 更新save)方法的區別查詢API的方法

bubuko 只有一個 pan 單獨 mode dig 萬能 .... .site 轉發之https://www.cnblogs.com/gyh04541/p/7910004.html 查詢api的方法: 表.objects.all() ---[obj1,obj2,..

安裝hadoop配置hadoop啟動namenode設置免密登錄的詳細解析!

啟動namenode和hadoop的配置首先安裝hadoop要安裝好java的開發環境,配置好jdk其實創建一個hadoop的用戶cd到這個用戶的目錄下創建一個apps的目錄。以後所有的東西都解壓進入apps解壓後的目錄中的文件如下這裏lib是本地的庫!bin是自己的操作命令,sbin是啟動命令!etc是配置

列出各個部門中工資高於本部門的平均工資的員工數部門號並按部門號排序用sql語句來表達)。

AR 思路 進行 info family order size table ID 查詢出各個部門中工資高於本部門的平均工資的員工數和部門號,並按部門號排序(用sql語句來表達) 1.創建的表格 2.思路: (1)首先查詢各個部門的平均工資 1 select dept

Android Sutdio的常用快捷鍵必備外掛繪製介面除錯應用

常用快捷鍵 程式碼跳轉 描述:跳轉是為了方便程式碼位置的定位,存在兩種跳轉:在定義處可以跳轉到呼叫處,在呼叫處可以跳轉到定義處。 快捷鍵:Ctrl + 滑鼠單擊 方法間跳轉 描述:從一個類方法跳轉到臨近的一個類方法。 快捷鍵:Alt + Up/Down

Math.round()增強for迴圈equals方法==的區別,instanceof運算子三目運算子的用法

1.Math.round() 有這樣一個問題,將數字23.4,23.6轉換成int型,得到的新數字是多少? 事實上直接轉換的話得到的數字都是23。但在我們程式設計的過程中有時候需要對數字進行四捨五入取整,那麼顯然上面的直接轉換就不能實現我們的要求。但好在java裡面給我提供了一個可以實現四捨五入

BTREE索引HASH索引聚集索引非聚集索引

https://www.jianshu.com/p/76530afa13cb https://blog.csdn.net/yifanSJ/article/details/79220044 BTREE索引和HASH索引 1、不同引擎的預設索引 不同的引擎對於索引有不同的支援:Innod

使用Ajax傳遞接收資料實現註冊註冊成功後跳轉

返回狀態資訊實體類省略get和set private String stauts; private String msg; 控制器 @RequestMapping(value = "register", method = RequestMetho

STM32移植cJsonFreeRTOS時cjson解析建立失敗問題

版權宣告:本文為博主原創文章,未經博主允許不得轉載。https://blog.csdn.net/u013184273/article/details/84870672 一,環境:STM32+cJson+FreeRTOS+Heap_4.c 二,FREERTOS的記憶體:Heap_4 Fre

關於javascript的原型原型鏈看我就夠了二)

溫故 建立物件的三種方式 通過物件直接量 通過new建立物件 通過Object.create() js中物件分為兩種 函式物件 普通物件 仔細觀察如下程式碼 function Foo(name) { this.name = name; } var fo

11.頻域裡的卷積——介紹傅立葉變換卷積快速傅立葉變換FFT)_1

目錄 介紹 FFT 介紹 我們將繼續討論頻率分析以及如何用頻率分量的概念來研究影象。如果你還記得上次我們講過的基於頻率的影象分解的概念。我們通過給你們看這張照片來回憶它(如圖)。這是著名的Dali圖片,當你在那裡允許高頻影象時,你會看到一個女人在欣賞地中海之類的東

java集合類ListSet比較各自的子類比較ArrayListVectorLinkedList;HashSetTreeSet)Map集合比較

ArrayList,LinkedList,Vector都屬於ListList:元素是有順序的,元素可以重複因為每個元素有自己的角標(索引)|-- ArrayList:底層是陣列結構,特點是:查詢很快,增刪稍微慢點,執行緒不同步:A執行緒將元素放在索引0位置,CPU排程執行緒A停止,B執行,也將元素放在索引0位

集合類:ListSet比較各自的子類比較ArrayListVectorLinkedList;HashSetTreeSet)

ArrayList,LinkedList,Vector都屬於List List:元素是有順序的,元素可以重複因為每個元素有自己的角標(索引)   |-- ArrayList:底層的資料結構是陣列結構,特點是:查詢很快,增 刪 稍微慢點,執行緒不同步   |-- Linke

Qt總結之二:遍歷資料夾檔案目錄並過濾獲取檔案資訊、字尾名、字首名二)

前言 需要在特定目錄或磁碟下查詢特定檔案 一、篩選目錄 (一)單一目錄下遍歷,篩選特定檔案 QDir dir("./SaveFiles"); QFileInfoList list = dir.entryInfoList(); (二)裝置所有磁碟中遍歷 QF

、有一個字串其中包含中文字元、英文字元數字字元請統計打印出各個字元的個數。

char[] c = { '6', 's', 'd', '7', 'g', '文', '中' }; int z = 0; int s = 0; int y = 0; for (char x : c) switch ((int) x / 10) { case 4:

程式設計實現: 李四去海南旅遊定機票機票的價格受淡季旺季影響受頭等艙經濟艙影響。 假設機

public class Test_17 {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("請輸入您出行的月份:");int

c++ new operatoroperator newdelete operatoroperator delete

1 new operator 和 operator new,delete operator 和 operator delete new operator: c++中的關鍵字new,如A *a = new A; operator new:c++中的一個操作符,並且可以被過載