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

const int *p與 int *const p區別

編輯:關於C語言
 

該例子說明幾個問題
1. const int *p語義:
(1) const 修飾的是整個*p,所以*p是個常量,是不能被賦值的。
(2) p前並沒有用const修飾,所以p是指針變量,能被賦值重新指向另一個內存地址。
(3) int const *p 與 const int *p完全相同。
2. int *const p語義:
(1) p因為有了const修飾,所以p值是不可修改的。
(2) 整個*p的前面沒有const的修飾,也就是說,*p是變量,所以可以通過*p來修改它所指內存的值。
3. 總結:
(1) 如果const修飾在*p前,則不能改的是*p,p的值可以修改。
(2) 如果const是直接寫在p前面,則p不能改,*p的值可以修改。
4. 兩個基礎概念: 指針常量和常量指針(重點要分清總結的兩句話,至於叫什麼,知道就行,不必深究)
(1) 指針常量: 即指針本身的值是不可改變的,而指針指向的變量的值是可以改變的;
(2) 常量指針: 即指針指向的變量的值是不可改變的,而指針本身的值是可以改變的;

原文:徹底搞定C指針-姚雲飛

測試環境vc6.0
********************************************************************/



#include <stdio.h>


int main(void)
{
int i = 30;
int j = 40;

//==================================test const int *p==================================
/*const int *p = &i;

p = &j; //ok
//*p = 80; //error
j = 80;
printf("%d\n", *p);*/


//==================================test int *const==================================
/*int *const p = &i;
//p = &i2; //error
*p = 80;
printf("%d\n", i);*/


//========================情況1:int *p指針指向const int i常量========================
/*const int a = 40;
//int *p = &a; //error: cannot convert from 'const int *' to 'int *',否則p豈不是能修改a的值了嗎
int *p = (int *)&a; //ok
*p = 80;
printf("a = %d\n", a); //a還是40
printf("*p = %d\n", *p); //*p = 80*/

//========================const int *p指針指向const int i=============================
/*const int b = 40;
const int *p = &b; //ok
//*p = 80; //error
//b = 80; //error*/

//========================用const int *const p聲明的指針==============================
int c = 10;
int d = 20;
const int * const p = &c; //p的值不能改,也不能通過p修改c的值
//*p = 80; //error
//p = &d; //error

return 0;
}


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