C语言 指针声明和定义 - C语言零基础入门教程
目錄
- 一.指針簡介
- 1.內存
- 2.內存地址
- 3.指針聲明
- 二.指針類型
- 三.聲明并初始化一個指針
- 1.聲明指針并直接初始化 – 推薦
- 2.先聲明指針在初始化 – 不推薦
- 四.查看指針地址和指針的值
- 五.NULL 指針 – 空指針
- 六.重點總結
- 七.猜你喜歡
零基礎 C/C++ 學習路線推薦 : C/C++ 學習目錄 >> C 語言基礎入門
一.指針簡介
指針和數組是 C 語言的靈魂,關于數組,前面我們已經介紹完了,在講解指針之前,需要明白三個概念:內存 / 內存地址 / 指針;
1.內存
C 語言所有變量都存放在內存中,就好比杯子里的水,水就是變量,杯子就是內存,內存作為容器用來存放變量;
2.內存地址
內存地址就好比一個人除了有名字之后外還有身份證,每個人的身份證都是唯一的,內存地址也是唯一的,如何查看內存地址,下面的文章也有有講解;
3.指針聲明
指針也是 C 語言中變量的一種,其值為一個變量的地址,即內存位置的直接地址。指針變量聲明的一般形式為:
/* type:指針類型,它必須是一個有效的 C 數據類型,例如:int / float / double / char ..... var-name : 指針變量的名稱 */ type *var-name;注意:不要忘記在指針類型和變量名中間還有一個 * 號,沒有這個 * 號,只是定義了一個普通變量,這也是普通變量聲明和指針聲明的區別之一;
int *p; /* 一個整型的指針 */ int p; /* 一個整型的變量 */二.指針類型
指針很靈活,它可以指向任意類型的數據。指針的類型說明了它所指向地址空間的內存,以下是有效的指針聲明:
int *p; /* 一個整型的指針 */ double *p; /* 一個 double 型的指針 */ float *p; /* 一個浮點型的指針 */ char *p; /* 一個字符型的指針 */注意:不要忘記在指針類型和變量名中間還有一個 * 號,沒有這個 * 號,只是定義了一個普通變量,這也是普通變量聲明和指針聲明的區別之一;
三.聲明并初始化一個指針
1.聲明指針并直接初始化 – 推薦
int *p = 10; //聲明一個int類型的指針指向變量為10的內存地址 double *p = 10.55; //聲明一個double類型的指針指向變量為10.55的內存地址 float *p = 10.0; //聲明一個float類型的指針指向變量為10.0的內存地址 char *p = "123456"; //聲明一個char類型的指針指向變量為"123456"的內存地址2.先聲明指針在初始化 – 不推薦
C 語言中,定義局部變量時如果未初始化,則值是隨機的;全局變量 、靜態變量初始值為 0 ;
四.查看指針地址和指針的值
在文章 格式控制符/占位符 中已經介紹了不少占位符,而對于指針的占位符則是用 %p 或者 %x 表示,具體使用參考下面例子:
/******************************************************************************************/ //@Author:猿說編程 //@Blog(個人博客地址): www.codersrc.com //@File:C語言教程 - C語言 指針聲明和定義 //@Time:2021/06/12 08:00 //@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! /******************************************************************************************/#include "stdafx.h" #include "stdio.h" #include "stdlib.h"int main() {int iValue = 10;int *pValue = &iValue;printf("整形變量iValue值:%d 整形變量iValue內存地址:%p\n", iValue,&iValue);printf("整形指針變量pValue值:%d 整形指針變量pValue內存地址:%p\n", *pValue, pValue);printf("-------------------------------------------------------\n");*pValue = 20;printf("整形變量iValue值:%d 整形變量iValue內存地址:%p\n", iValue, &iValue);printf("整形指針變量pValue值:%d 整形指針變量pValue內存地址:%p\n", *pValue, pValue);printf("-------------------------------------------------------\n");iValue = 30;printf("整形變量iValue值:%d 整形變量iValue內存地址:%p\n", iValue, &iValue);printf("整形指針變量pValue值:%d 整形指針變量pValue內存地址:%p\n", *pValue, pValue);system("pause");return 0; } /* 輸出結果: 整形變量iValue值:10 整形變量iValue內存地址:004FF798 整形指針變量pValue值:10 整形指針變量pValue內存地址:004FF798 ------------------------------------------------------- 整形變量iValue值:20 整形變量iValue內存地址:004FF798 整形指針變量pValue值:20 整形指針變量pValue內存地址:004FF798 ------------------------------------------------------- 整形變量iValue值:30 整形變量iValue內存地址:004FF798 整形指針變量pValue值:30 整形指針變量pValue內存地址:004FF798 請按任意鍵繼續. . . */在上面例子中:聲明了一個整形變量 iValue ,并使用指針 pValue 執行整形變量 iValue ,根據輸出的信息可以得到結論:兩者的內存地址都一樣;
由于整形變量 iValue 指針變量 pValue 內存地址一樣,整形變量 iValue 的值發生變化后指針 pValue 也會跟著一起變化,指針 pValue 的值發生變化后整形變量 iValue 的值也會跟著一起變化,兩者本來就是同一個, 就好比既可以通過名字找到你,也可以通過身份證號碼找到你;
五.NULL 指針 – 空指針
在變量聲明的時候,如果沒有確切的地址可以賦值,為指針變量賦一個 NULL 值,賦為 NULL 值的指針被稱為**空指針**。
NULL 指針是一個定義在標準庫中的值為零的常量。請看下面的程序:
/******************************************************************************************/ //@Author:猿說編程 //@Blog(個人博客地址): www.codersrc.com //@File:C語言教程 - C語言 指針聲明和定義 //@Time:2021/06/12 08:00 //@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! /******************************************************************************************/#include <stdio.h> int main () {int *ptr = NULL;printf("ptr 的地址是 %p\n", ptr );return 0; } //輸出:ptr 的地址是 0x0在大多數的操作系統上,程序不允許訪問地址為 0 的內存,因為該內存是操作系統保留的。然而,內存地址 0 有特別重要的意義,它表明該指針不指向一個可訪問的內存位置。但按照慣例,如果指針包含空值(零值),則假定它不指向任何東西。
如需檢查一個空指針,您可以使用 if 語句,如下所示:
if(ptr) /* 如果 p 非空,則完成 */ {//.... } if(!ptr) /* 如果 p 為空,則完成 */ {//.... }六.重點總結
指針作為一個變量,肯定有自己的地址,占位符使用 %p 或者 %x;
int *p = 10; printf(" p : %p",p);// 輸出地址:004FF798指針作為一個變量,肯定有自己的值,占位符使用 %d ,取指針的值需要在指針變量前面加上 * ,否則是取指針的地址,例如:
int *p = 10; printf(" p : %d",*p);// 輸出值: 10 printf(" p : %p",p); // 輸出地址:004FF798指針很靈活,它可以指向任意類型的數據。指針的類型說明了它所指向地址空間的內存
七.猜你喜歡
未經允許不得轉載:猿說編程 ? C 語言 指針聲明和定義
總結
以上是生活随笔為你收集整理的C语言 指针声明和定义 - C语言零基础入门教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 标识符命名规则
- 下一篇: jq之$(“ul li:first“)