程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言入門知識 >> c語言const關鍵字

c語言const關鍵字

編輯:C語言入門知識

作者:沉默羔羊


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
#include
#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;
}


轉載請標明出處

http://blog.csdn.net/shaohuazuo/article/details/40316987

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved