目錄
- [一.指針簡介]
- [1.內(nèi)存]
- [2.內(nèi)存地址]
- [3.指針聲明]
- [二.指針類型]
- [三.聲明并初始化一個指針]
- [1.聲明指針并直接初始化 – 推薦]
- [2.先聲明指針在初始化 – 不推薦]
- [四.查看指針地址和指針的值]
- [五.NULL 指針 – 空指針]
- [六.重點總結(jié)]
- [七.猜你喜歡]
零基礎(chǔ) C/C++ 學習路線推薦 : [C/C++ 學習目錄]>> [C 語言基礎(chǔ)入門]
一.指針簡介
指針和數(shù)組是 C
語言的靈魂,關(guān)于[數(shù)組],前面我們已經(jīng)介紹完了,在講解指針之前,需要明白三個概念:內(nèi)存 / 內(nèi)存地址 / 指針;
1.內(nèi)存
[C
語言]所有變量都存放在內(nèi)存中,就好比杯子里的水,水就是變量,杯子就是內(nèi)存,內(nèi)存作為容器用來存放變量;
2.內(nèi)存地址
內(nèi)存地址就好比一個人除了有名字之后外還有身份證,每個人的身份證都是唯一的,內(nèi)存地址也是唯一的,如何查看內(nèi)存地址,下面的文章也有有講解;
3.指針聲明
[指針]也是 C
語言中變量的一種,其值為一個[變量]的地址,即內(nèi)存位置的直接地址。指針變量聲明的一般形式為:
/*
type:指針類型,它必須是一個有效的 C 數(shù)據(jù)類型,例如:int / float / double / char .....
var-name : 指針變量的名稱
*/
type *var-name;
注意:不要忘記在指針類型和變量名中間還有一個 *
號,沒有這個 *
號,只是定義了一個普通變量,這也是普通變量聲明和指針聲明的區(qū)別之一;
int *p; /* 一個整型的指針 */
int p; /* 一個整型的變量 */
二.指針類型
指針很靈活,它可以指向任意類型的數(shù)據(jù)。[指針]的類型說明了它所指向地址空間的內(nèi)存,以下是有效的指針聲明:
int *p; /* 一個整型的指針 */
double *p; /* 一個 double 型的指針 */
float *p; /* 一個浮點型的指針 */
char *p; /* 一個字符型的指針 */
注意:不要忘記在指針類型和變量名中間還有一個 *
號,沒有這個 *
號,只是定義了一個普通變量,這也是普通變量聲明和指針聲明的區(qū)別之一;
三.聲明并初始化一個指針
1.聲明指針并直接初始化 – 推薦
int *p = 10; //聲明一個int類型的指針指向變量為10的內(nèi)存地址
double *p = 10.55; //聲明一個double類型的指針指向變量為10.55的內(nèi)存地址
float *p = 10.0; //聲明一個float類型的指針指向變量為10.0的內(nèi)存地址
char *p = "123456"; //聲明一個char類型的指針指向變量為"123456"的內(nèi)存地址
2.先聲明指針在初始化 – 不推薦
C
語言中,定義局部變量時如果未初始化,則值是隨機的;全局變量 、靜態(tài)變量初始值為 0
;
四.查看指針地址和指針的值
在文章 [格式控制符/占位符]中已經(jīng)介紹了不少占位符,而對于指針的占位符則是用 %p
或者 %x
表示,具體使用參考下面例子:
/******************************************************************************************/
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
int main()
{
int iValue = 10;
int *pValue = &iValue;
printf("整形變量iValue值:%d 整形變量iValue內(nèi)存地址:%p\n", iValue,&iValue);
printf("整形指針變量pValue值:%d 整形指針變量pValue內(nèi)存地址:%p\n", *pValue, pValue);
printf("-------------------------------------------------------\n");
*pValue = 20;
printf("整形變量iValue值:%d 整形變量iValue內(nèi)存地址:%p\n", iValue, &iValue);
printf("整形指針變量pValue值:%d 整形指針變量pValue內(nèi)存地址:%p\n", *pValue, pValue);
printf("-------------------------------------------------------\n");
iValue = 30;
printf("整形變量iValue值:%d 整形變量iValue內(nèi)存地址:%p\n", iValue, &iValue);
printf("整形指針變量pValue值:%d 整形指針變量pValue內(nèi)存地址:%p\n", *pValue, pValue);
system("pause");
return 0;
}
/*
輸出結(jié)果:
整形變量iValue值:10 整形變量iValue內(nèi)存地址:004FF798
整形指針變量pValue值:10 整形指針變量pValue內(nèi)存地址:004FF798
-------------------------------------------------------
整形變量iValue值:20 整形變量iValue內(nèi)存地址:004FF798
整形指針變量pValue值:20 整形指針變量pValue內(nèi)存地址:004FF798
-------------------------------------------------------
整形變量iValue值:30 整形變量iValue內(nèi)存地址:004FF798
整形指針變量pValue值:30 整形指針變量pValue內(nèi)存地址:004FF798
請按任意鍵繼續(xù). . .
*/
在上面例子中:聲明了一個整形變量 iValue
,并使用指針 pValue
執(zhí)行整形變量 iValue
,根據(jù)輸出的信息可以得到結(jié)論:兩者的內(nèi)存地址都一樣;
由于整形變量 iValue
指針變量 pValue
內(nèi)存地址一樣,整形變量 iValue
的值發(fā)生變化后指針 pValue
也會跟著一起變化,指針 pValue
的值發(fā)生變化后整形變量 iValue
的值也會跟著一起變化,兩者本來就是同一個, 就好比既可以通過名字找到你,也可以通過身份證號碼找到你;
五.NULL 指針 – 空指針
在變量聲明的時候,如果沒有確切的地址可以賦值,為指針變量賦一個 NULL
值,賦為 NULL
值的指針被稱為**[空指針]**。
NULL
指針是一個定義在標準庫中的值為零的常量。請看下面的程序:
/******************************************************************************************/
#include <stdio.h>
int main ()
{
int *ptr = NULL;
printf("ptr 的地址是 %p\n", ptr );
return 0;
}
//輸出:ptr 的地址是 0x0
在大多數(shù)的操作系統(tǒng)上,程序不允許訪問地址為 0 的內(nèi)存,因為該內(nèi)存是操作系統(tǒng)保留的。然而,內(nèi)存地址 0 有特別重要的意義,它表明該指針不指向一個可訪問的內(nèi)存位置。但按照慣例,如果指針包含空值(零值),則假定它不指向任何東西。
如需檢查一個空指針,您可以使用 [if
]語句,如下所示:
if(ptr) /* 如果 p 非空,則完成 */
{
//....
}
if(!ptr) /* 如果 p 為空,則完成 */
{
//....
}
六.重點總結(jié)
指針作為一個變量,肯定有自己的地址,[占位符使用 %p
或者 %x
];
int *p = 10;
printf(" p : %p",p);// 輸出地址:004FF798
指針作為一個變量,肯定有自己的值,占位符使用 %d
,取指針的值需要在指針變量前面加上 *
,否則是取指針的地址,例如:文章來源:http://www.zghlxwxcb.cn/news/detail-842281.html
int *p = 10;
printf(" p : %d",*p);// 輸出值: 10
printf(" p : %p",p); // 輸出地址:004FF798
指針很靈活,它可以指向任意類型的數(shù)據(jù)。指針的類型說明了它所指向地址空間的內(nèi)存文章來源地址http://www.zghlxwxcb.cn/news/detail-842281.html
到了這里,關(guān)于C語言 指針聲明和定義 - C語言零基礎(chǔ)入門教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!