指標常量,用指標修飾的常量,它的本質是乙個常量
int a =
111, b =
222;
int*
const p =
&a;printf
("%p\n"
,p);
printf
("%d\n"
,*p)
;*p =
333;
printf
("%d\n"
,*p)
; p =
&b;//報錯,p的值不能更改,[error] assignment of read-only variable 'p'
結果000000000024fe3c
111333
這個常量的型別是 int *。所以p的值是常量,也就是說p所指向的位址是不能更改的,但是位址上的值可以更改。
指向常量的指標,它本身是乙個指標,這個指標指向乙個常量。
int a =
111, b =
222;
const
int* p =
&a;printf
("%d\n"
,*p)
;//*p = 333;//報錯,[error] assignment of read-only location '*p'
p =&b;printf
("%d\n"
,*p)
; a =
333;
printf
("%d\n"
,a);
結果:111
222333
指標p的值可以更改,也就是說p指向的位址可以更改,但是位址上的值不能更改(不能通過*p來更改)。
常量指正經常用在函式形參中,用於保護資料不受更改:
//函式原型
intsum
(const
int* list)
;//傳入的是個常量指標,list的資料只能被讀取,不能被更改
適用於constzhi指標的規則:
非cosnt指標的位址和值可以賦給const指標cosnt指標的位址和值不能賦給非const指標
cosnt int ci =0,
*ci_ptr;
int nci =0,
*nci_ptr;
//const指標賦給const,非const賦給非const,正確
ci_ptr =
&ci;
nci_ptr =
&nci;
//非const賦給const,正確
ci_ptr =
&ci;
ci_ptr = nci_ptr;
//將cosnt賦給非const,不正確
nci_ptr =
&ci;
nci_ptr = ci_ptr;
在函式中更能體現其作用:
給定乙個函式:
void
test
(const
int*p)
;
它接收乙個int的位址,並且不能更改p指向的資料。
test
(ci_ptr)
;test
(nci_ptr)
;
它可以傳入const指標或者普通指標。反之不然,假設
void
test2
(int
*p);
test
(ci_ptr)
;
C語言之常量指標和指標常量
參考部落格 摘抄以上部落格內容 一 指標常量 1 首先是乙個常量,其次是用指標修飾的常量,一般表述為 int const p 指標常量2 指標指向的位置 位址 不能改變,指標本身是乙個常量,但是指標指向的內容 值 是可以發生改變的 3 通過 來進行演示如下 int a,b int const p a...
c 指標常量 和 常量指標
指標常量 指向常量的位址,不允許改變指向位址,指向位置的變數值能被改變 p不可以變 const p 常量指標 指向常量的指標,指標指向的物件不能通過這個指標來修改,可是仍然可以通過原來的宣告修改,也就是說量指標可以被 賦值為變數的位址,之所以叫做常量指標,是限制了通過這個指標修改變數的值 cont ...
C 指標常量和常量指標
首先在c 目前我看到的型別宣告方式,該變數的型別都是由最後幾個字來確定,前面是定語,修飾詞。有其他不同的歡迎指出,共同學習 比如 指標陣列 是陣列,陣列裡存的是指標。陣列指標 是指標,指標指向陣列。所以指標常量 首先是常量,然後是乙個指標,即是該指標是乙個常量,指標的值即位址不會變。常量指標 首先是...