天天看點

C語言_常量指針與指針常量前言常量指針指針常量指向常量的常量指針

前言

我們經常會看到 const 和 指針 自由組合, const 在先 在後, 所産生的效果是不一樣的. 經常會混淆概念, 在這裡我們将他詳細的區分一下, 什麼是常量指針以及指針常量, 他們具體有什麼特點, 讓我們一起随着代碼去驗證!

讀法: const (常量) 和 * (指針) 誰在前, 先讀誰

常量指針

常量指針: 就是指向常量的指針, 指針指向的内容不能被改變, 但是位址可以被改變;

注意: 這裡的内容不能被改變是不能被直接改變, 可以通過指向位址的改變而改變内容

聲明格式: 特别注意, 有倆種聲明形式均正确:

const 類型 *指針常量名; 如: const int *p1;

類型 const *指針常量名; 如: int const *p1;

指針常量

指針常量: 就是指針的本身是常量, 指向的位址不可被改變, 内容可以被改變

這裡我們會寫執行個體來進行驗證:

聲明格式:

指針類型 * const 指針名; 如: int * const p2;

指向常量的常量指針

指向常量的常量指針, 指向的位址和指向的内容均不可被改變

聲明格式:

const 指針類型* const 指針名; 如: const int* const p;

驗證源碼

/*********************************************************************************
 *      Copyright:  (C) 2021 guanyunpeng
 *                  All rights reserved.
 *
 *       Filename:  const_and_pointer.c
 *    Description:  This file 
 *                 
 *        Version:  1.0.0(2021年08月18日)
 *         Author:  guanyunpeng <[email protected]>
 *      ChangeLog:  1, Release initial version on "2021年08月18日 15時32分31秒"
 *                 
 ********************************************************************************/

#include <stdio.h>

int main (int argc, char **argv)
{
    int         number1 = 3;
    int         number2 = 5;
    const int  *p1 = &number1;      // 常量指針
    int* const  p2 = &number1;      // 指針常量
    const int* const p3 = &number1; // 指向常量的常量指針

    p1 = &number2;
    p2 = &number2;
    p3 = &number2;

    *p1 = 4;
    *p2 = 4;
    *p3 = 4;

    return 0;
} 
           

運作結果

C語言_常量指針與指針常量前言常量指針指針常量指向常量的常量指針

由此可見, 常量指針内容是不可以被改變的; 指針常量位址是不可以被改變的; 指向常量的常量指針, 内容和位址均不可被改變

繼續閱讀