作者:沉默羔羊
c語言const關鍵字:
-- 特點。
使用該關鍵修飾的變量不能被改變。
--指針常量。
demo:
const char *p或者是 char const * p
--常量指針。
demo:
char * const p
--常量指針和指針常量。
1.常量指針指的是如 char * const p, p是一個常量,p不能改變指向。
2.指針常量指的是如char const *p, p指向一個字符常量,p可以改變指向。但是不能改變*p.
--對於常量指針和指針常量的記憶方法如下。
The C++ Programming Language裏面給出過一個助記的方法:
把一個聲明從右向左讀。
char * const cp; ( * 讀成 pointer to ) cp is a const pointer to char
const char * p; p is a pointer to const char;
/*************************************************************************
> File Name: const1.c
> Author: 沉默羔羊
> Mail: [email protected]
> Created Time: 2014年10月20日 星期一 19時29分01秒
************************************************************************/
#include<stdio.h>
#include<string.h>
#define CONST_POINTER
#define POINTER_CONST
int test(void)
{
/***
* const:關鍵字,
* 使用const修改的變量,初始化之後不能步修改。
*
* 該關鍵值使用之後比較容易產生疑問的表達式:
* 一:指針常量
* const char *p;
* 或者是
* char const *p;
* 二:常量指針
* char * const p;
* 三:常量指針也是指針常量的表達式。
* const char * const *p;
*
* The C++ Programming Language裏面給出過一個助記的方法:
* 把一個聲明從右向左讀。
* char * const cp; ( * 讀成 pointer to ) cp is a const pointer to char
* const char * p; p is a pointer to const char;
*/
int a = 10;
int b = 20;
const int * p0; //指針常量
int const * p1; //指針常量
int * const p2 = &b; //常量指針。
const int * const p3 = &a;
#ifdef CONST_POINTER
p0 = &a;
printf("p0 = %d\n",*p0);
p0 = &b;
printf("p0 = %d\n",*p0);
#if 0
*p0 = 10; //p0是一個指向常量字符的指針。但p0不是常量。p0指向的是int類型的常量。
#endif
p1 = &a;
printf("p1 = %d\n",*p1);
p1 = &b;
printf("p1 = %d\n",*p1);
#if 0
*p1 =10 ; //更改指針指向的常量時變量會報錯。
#endif
#endif
#ifdef POINTER_CONST
#if 0
p2 = &a; //p2是個常量。修改p2的指向編譯的時候會出錯。
#endif
*p2 = 30;
printf("p2 = %d\n",*p2);
#endif
#if 0
*p3 = 10; //編譯錯誤。
p3 = &b; //編譯是錯誤。
#else
printf("p3 = %d\n", *p3);
#endif
return 0;
}
int main(void)
{
test();
return 0;
}
轉載請標明出處