C語言 指針聲明和定義 - C語言零基礎入門教程


目錄

零基礎 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

指針很靈活,它可以指向任意類型的數據。指針的類型說明了它所指向地址空間的內存

七.猜你喜歡

  1. 安裝 Visual Studio
  2. 安裝 Visual Studio 插件 Visual Assist
  3. Visual Studio 2008 卸載
  4. Visual Studio 2003/2015 卸載
  5. C 語言格式控制符/占位符
  6. C 語言邏輯運算符
  7. C 語言三目運算符
  8. C 語言逗號表達式
  9. C 語言 sizeof 和 strlen 函數區別
  10. C 語言 strcpy 和 strcpy_s 函數區別
  11. C 語言 memcpy 和 memcpy_s 區別
  12. C 語言 數組定義和使用
  13. C 語言 數組遍歷
  14. C 語言 數組排序 – 冒泡法排序
  15. C 語言 數組排序 – 選擇法排序
  16. C 語言 數組排序 – 插入法排序
  17. C 語言 數組排序 – 快速法排序
  18. C 語言 數組下標越界
  19. C 語言 數組內存溢出
  20. C 語言 數組下標越界和內存溢出區別
  21. C 語言 數組長度計算
  22. C 語言 指針聲明和定義

未經允許不得轉載:猿說編程 » C 語言 指針聲明和定義

本文由博客 - 猿說編程 猿說編程 發布!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM