1. 程式人生 > >陣列與指標的區別及函式的呼叫

陣列與指標的區別及函式的呼叫

1.陣列與指標的區別:

(1)空間分配

指標是動態分配空間,通過malloc在堆上分配所需要的空間,分配的空間不一定連續,在使用完之後需要呼叫free()來釋放分配空間。而陣列是靜態分配空間,在全域性變數區或者棧

上分配空間,分配的空間是連續的,區域性變數在生命週期結束後自動釋放,全域性變數在程式結束完自動釋放。

(2)訪問效率

指標是通過地址間接訪問,而陣列是直接訪問數值。因此指標的訪問效率低,陣列的訪問效率高。

(3)安全性

指標使用不當會造成記憶體洩漏,陣列使用不當會造成陣列越界。

(4)函式引數

陣列要用相應的指標當形參,而指標要用指標的指標來當形參。

(5)位元組大小

指標的位元組大小是固定的,由作業系統決定。陣列的位元組大小由陣列大小和陣列指向的型別共同來決定。

(6)識別符號

指標名是變數,陣列名是指標常量。所以指標p可以進行p++,而陣列名不可以用於a++。

(7)對應的記憶體空間

指標儲存的是地址,陣列儲存的是數值。

2.函式的使用:

對於一個函式我們需要注意他的函式名,形參和返回值。

(1)函式名也是一個指標常量,儲存的是函式存放的地址(函式的入口地址)。

(2)函式的呼叫:

1.通過函式名找到函式的入口地址。

2.給形參分配記憶體空間。

3.傳值:把實參變數對應空間的值傳給形參變數對應的空間。

4.執行函式體裡的語句。

5.函式返回並釋放記憶體空間。

這裡我們需要注意的是什麼時候給函式形參傳遞值,什麼時候給函式形參傳遞地址。

讀(只使用,不修改)實參變數對應的記憶體空間的值時,傳實參變數名。

寫(即使用,也修改)實參變數對應記憶體空間的值時,傳實參變數對應的記憶體空間的地址。

呼叫函式要對返回值作出判斷。

要進行入口引數檢查,最好不要依賴於別人已經實現的函式。

例如:當我們給一個指標分配空間時就要對其返回值進行判斷。

int *ptr;

ptr = (int *)malloc(sizeof(char)*100);

if(ptr == NULL)

{

    printf("error!");

    exit(1);

}

exit(1)結束整個程式,標頭檔案為#include<stdlib.h>

echo $?當前結束程式的返回值。

傳入引數:本身有值,帶入函式呼叫。

傳出引數:沒用值,在函式執行呼叫過程中把值帶出,可以充當函式的返回值。

返回區域性變數的地址很危險,容易釋放,所以return 不能返回區域性變數的地址。

相關推薦

陣列指標區別函式呼叫

1.陣列與指標的區別: (1)空間分配 指標是動態分配空間,通過malloc在堆上分配所需要的空間,分配的空間不一定連續,在使用完之後需要呼叫free()來釋放分配空間。而陣列是靜態分配空間,在全域性

函式返回指標,引用指標區別

1,函式不可以返回棧記憶體的指標,但是可以返回堆記憶體的指標,可以free掉兩次指向空的指標,但是不能連續free兩次指向記憶體的指標,會產生已放棄   int main() { int *a; a = (int *)malloc(10); a[0] = 1

C語言中陣列指標區別

本文是對《C語言深度剖析》一書內容的拓展,在看這本書的時候解了很多我之前的一些困惑,故在此記錄。對陣列的引用總是可以寫成對指標的引用,而且確實存在一種指標和陣列的定義完全相同的上下文環境。 但是指標和陣列還是在本質上是不一樣的。指標就是指標,指標變數在32位的系統下面是4B

[基礎知識]6.陣列指標區別

下面程式碼的執行結果是? int GetSize(int data[]){   return sizeof(data); } int _tmain(int argc, _TCHAR* argv[]) { int data1[] = {1,2,3,4,5}; int size1 =

一維陣列指標,二維陣列指標指標陣列陣列指標的概念詳解、例項解析

概念詳解:指標:指標與“int a”,“float b”一樣,也是一種變數,只是指標變數中儲存的是記憶體單元的地址,這是與“int a”和“float b”的本質區別,C語言的精華就在於指標、結構體和連結串列。一維陣列:定義一維陣列之後,即在記憶體中分配一段連續的地址空間,如

《C語言程式設計》實踐專案——二維陣列指標

【專案1-二維陣列當函式引數】定義一個函式來完成對引數陣列中元素的求和工作,函式宣告如下:int sum(int array[ ][4],int m,int n); //該函式完成對array陣列中的前m行和n列元素求和在以下程式的基礎上,完成對sum函式的定義。#include <stdio.h&g

sql(join中onwhere區別) / NVL函式 / oracle儲存過程中is和as區別 / JAVA呼叫資料庫儲存過程

left join :左連線,返回左表中所有的記錄以及右表中連線欄位相等的記錄。 right join :右連線,返回右表中所有的記錄以及左表中連線欄位相等的記錄。 inner join: 內連線,又叫等值連線,只返回兩個表中連線欄位相等的行。 full join:外連線,返回兩個表中的行:left jo

函式宣告的幾種方式,函式宣告函式表示式的區別函式呼叫的幾種方式

函式宣告的幾種方式 三種 : 函式宣告(1),函式表示式(2~5),Function構造器(6) 1.function func1(a){}//函式宣告 2.var func2=function(b){}//函式表示式 3.var func3=function func4(

函式內 宣告一個字元陣列和一個指向字串陣列指標 區別

函式內 宣告一個字元陣列: char* Fuction()...{    char a[]="abcdefg";//存取在棧中return a;                  //返回指向“棧記憶體”的指正,VC6.0發出warning} 函式內宣告一個指向字串陣列

MySQL中MyISAMInnoDB區別選擇,mysql添加外鍵

title 必須 pan 就會 默認 簡化 平臺 兩種 myisam InnoDB:支持事務處理等不加鎖讀取支持外鍵支持行鎖不支持FULLTEXT類型的索引不保存表的具體行數,掃描表來計算有多少行DELETE 表時,是一行一行的刪除InnoDB 把數據和索引存放在表空間裏面

js onclickaddEventListener 區別用法

nbsp scala 一段 onclick 元素 user 不同的 公司 utf-8 addEventListener(建議使用)好比一個監聽容器,這個容器裏面可以裝很多個監聽事件,而且每一個事件都會執行。 onclick 在今天之前我使用這個(onclick)比較多(單純

MySQL中MyISAMInnoDB區別選擇

重建 包含 好的 數據 mysql 備份 處理 表空間 種類 InnoDB:支持事務處理等不加鎖讀取支持外鍵支持行鎖不支持FULLTEXT類型的索引不保存表的具體行數,掃描表來計算有多少行DELETE 表時,是一行一行的刪除InnoDB 把數據和索引存放在表空間裏面跨平臺可

WPF TemplateBindingBinding區別自定義ImageButton

TemplateBinding與Binding區別在於 1:TemplateBinding只是單方向的資料繫結 2:TemplateBinding不會自動轉換資料型別 這裡用一個自定義ImageButton驗證下第2條: public class ImageButton : Button

【C語言】一維陣列、二維陣列指標

一維陣列和指標: 1、一維陣列名: 對於這樣的一維陣列:int a[4];  a作為陣列名就是我們陣列的首地址, a是一個地址常量 .  首先說說常量和變數的關係, 對於變數來說, 用箱子去比喻再好不過了, 宣告一個變數就宣告一個箱子,比如我們開闢出一個蘋果型別的箱子, 給這個變

fortran陣列指標淺談一

Program vp implicit none integer, target :: x(5) = [1,2,3,4,5] integer, pointer :: p(:) => null() p => x !.. 指標指向陣列x

Ruby--陣列字串轉換去重

1 字串轉陣列 split(",") #字串a a = "12,34,56" #陣列a a = a.split(",") #a = ["12","34","56"] 2 陣列轉成字串 join(",") #陣列 a = ["12","34

Mabitis中的#$符號區別用法介紹

一、介紹  mybatis 中使用 Mapper.xml裡面的配置進行 sql 查詢,經常需要動態傳遞引數,例如我們需要根據使用者的姓名來篩選使用者時,sql 如下: ?

引用指標區別

區別: 引用不能為空,當引用被建立時,它必須被初始化;指標可以為空值,可以在任何時候被初始化 一旦一個引用被初始化為指向一個物件,它就不能改變為另一個物件的引用。指標則可以在任何時候指向另一個物件 不可能有NULL引用,必須確保引用是和一塊的合法的儲存單元關聯

【c語言】帶你真正走進指標的世界——陣列指標的關係(一)

       每天下課之後,都感覺老師上課在神仙程式設計,我們一群凡人在底下面無表情地走神,前一秒還是在講加減乘除的基本用法,後一秒就變成了指標陣列、陣列指標、結構體指標和N級指標的性質以及運用............(真是令人頭禿 —^—) ——————

嵌入式c語言基礎 --陣列指標

嵌入式c語言基礎 1.指標與陣列 指標是一種變數的型別,存放某一元素的地址 指標獲取陣列中的值 #include <stdio.h> int main(void) { int a = 10; int *p = &a;