第十七課、c指標(概述)
17.1
、什麼是記憶體
通過指標,可以簡化一些
c 程式設計任務的執行,還有一些任務,如
動態記憶體分配
,沒有指標是無法執行的。所以,想要成為一名優秀的
c 程式設計師,學習指標是很有必要的。
每乙個變數都有乙個記憶體位置,每乙個記憶體位置都定義了可使用連字型大小(&
)運算子訪問的位址,它表示了在記憶體中的乙個位址。
eg#include
<
stdio.h
>
intmain()
結果:var1
0x7fff5cc109d4
var2
0x7fff5cc109de
17.2
、什麼是指標
指標是乙個變數,其值為另乙個變數的位址,即,記憶體位置的直接位址。
就像其他變數或常量一樣,必須在使用指標儲存其他變數位址之前,對其進行宣告。指標變數宣告的一般形式為:
type
*var
-name;
在這裡,type
是指標的基型別,它必須是乙個有效的
c 資料型別,var-name
是指標變數的名稱。
用來宣告指標的星號
* 與乘法中使用的星號是相同的。但是,在這個語句中,星號是用來指定乙個變數是指標。
以下是有效的指標宣告:
int*ip
; /*
乙個整型的指標*/
double*dp
; /*
乙個double
型的指標*/
float*fp
; /*
乙個浮點型的指標*/
char*ch
; /*
乙個字元型的指標*/
所有指標的值的實際資料型別
,不管是整型、浮點型、字元型,還是其他的資料型別,都是一樣的,都是乙個代表記憶體位址的長的十六進製制數。不同資料型別的指標之間唯一的不同是,指標所指向的變數或常量的資料型別不同。
17.3
、如何使用指標
使用指標時會頻繁進行以下幾個操作:定義乙個指標變數、把變數位址賦值給指標、訪問指標變數中可用位址的值。這些是通過使用
一元運算子
*來返回位於運算元所指定位址的變數的值。
下面的例項涉及到了這些操作:
eg
:
#include
<
stdio.h
>
intmain()
結果:address
of var
variable
:bffd8b3c
address
stored
inip variable
:bffd8b3c
value
of *
ip variable:20
17.4
、c中的null指標
在變數宣告的時候,如果
沒有確切的位址可以賦值,為指標變數賦乙個
null
值是乙個良好的程式設計習慣。賦為
null
值的指標被稱為空指標。
null
指標是乙個定義在標準庫中的
值為零的常量。
請看下面的程式:
eg
:
#include
<
stdio.h
>
intmain()
結果:ptr
的值是0
在大多數的作業系統上,程式
不允許訪問位址為
0 的記憶體
,因為該記憶體是作業系統保留的。然而,記憶體位址
0 有特別重要的意義,
它表明該指標不指向乙個可訪問的記憶體位置
。但按照慣例,如果指標包含空值(零值),則假定它不指向任何東西。
如需檢查乙個空指標,您可以使用
if 語句,如下所示: if
(ptr
)/*
如果p
非空,則完成*/
if(!ptr
)/*
如果p
為空,則完成*/
JAVA第十七課
一 序列化與反序列化 序列化是將物件的狀態寫入特定的流中的過程 反序列化則是從特定的流中獲取資料重新構建物件的過程 二 實現序列化的步奏 1 實現serilizable介面。2 建立物件輸出流 3 呼叫writeobject 方法將物件寫入檔案 4 關閉物件輸出流 三 常見異常 notseriali...
Linux第十七課
一 squid 八爪魚單純的 不加密 埠號為3128 支援http ftp ssl等多種協議的資料快取,可以基於訪問控制列表 acl 和訪問許可權列表 arl 執行內容過濾與許可權管理功能。正向 模式 一般用於企業區域網之中,讓企業使用者統一地通過squid服務訪問網際網路資源,可以在一定程度上減少...
python第十七次課 2018 5 11
orm思想 需求 如果我們從資料庫查出來幾條資料,需要阿紫python表示出來 student id name age grader 1,ling 18,m 59 2,jack 16,m 89 3,ccj 17,m 69 tuple 資料不可變 想知道表的結構,int varchar for x i...