在C語言中,常量指針是指不能改變其所指向變量的地址,即地址將保持不變。因此,我們可以說如果一個(gè)常量指針指向某個(gè)變量,那么它不能指向其他變量。
<指針類型> * const <指針名稱>;
常量指針的聲明如下:
int * const ptr;
通過示例來理解常量指針
#include <stdio.h>
int main()
{
int a = 1;
int b = 2;
int * const ptr;
ptr = &a;
ptr = &b;
printf('ptr的值為:%d', *ptr);
return 0;
}
以上代碼解釋如下:
我們聲明了兩個(gè)變量a和b,分別賦值為1和2。
我們聲明了一個(gè)常量指針。
首先,我們將變量'a'的地址賦給指針'ptr'。
然后,我們將變量'b'的地址賦給指針'ptr'。
最后,我們嘗試打印指針'ptr'所指向的變量的值。
輸出結(jié)果
從上述輸出結(jié)果可以看出,以上代碼產(chǎn)生了錯(cuò)誤:'assignment of read-only variable 'ptr''。這意味著指針'ptr'所持有的變量'ptr'的值是只讀的。在上述代碼中,我們?cè)噲D將'ptr'的值從&a更改為&b,但這在使用常量指針時(shí)是不可能的。因此,我們可以說,指向某個(gè)變量的常量指針不能指向其他變量。
指向常量的指針是指通過該指針指向的變量的值不能被更改。這些指針的地址可以更改,但指針?biāo)赶虻淖兞康闹挡荒芨摹?/span>
const <指針類型> * <指針名稱>
指向常量的指針的聲明如下:
const int *ptr;
通過示例來理解。
首先,我們編寫一個(gè)更改指針值的代碼示例:
#include <stdio.h>
int main()
{
int a = 100;
int b = 200;
const int *ptr;
ptr = &a;
ptr = &b;
printf('ptr的值為:%u', ptr);
return 0;
}
以上代碼解釋如下:
我們聲明了兩個(gè)變量a和b,分別賦值為100和200。
我們聲明了一個(gè)指向常量的指針。
首先,我們將變量'a'的地址賦給指針'ptr'。
然后,我們將變量'b'的地址賦給指針'ptr'。
最后,我們嘗試打印'ptr'的值。
輸出結(jié)果
以上代碼成功運(yùn)行,并在輸出中顯示了'ptr'的值。
現(xiàn)在,我們編寫一個(gè)改變指針?biāo)赶虻淖兞恐档拇a示例。
#include <stdio.h>
int main()
{
int a = 100;
int b = 200;
const int *ptr;
ptr = &b;
*ptr = 300;
printf('ptr的值為:%d', *ptr);
return 0;
}
以上代碼解釋如下:
我們聲明了兩個(gè)變量'a'和'b',分別賦值為100和200。
我們聲明了一個(gè)指向常量的指針。
我們將變量'b'的地址賦給指針'ptr'。
然后,我們?cè)噲D通過指針'ptr'修改變量'b'的值。
最后,我們嘗試打印指針'ptr'所指向的變量的值。
輸出結(jié)果
以上代碼顯示了錯(cuò)誤:'assignment of read-only location '*ptr''。這個(gè)錯(cuò)誤意味著我們不能改變指針?biāo)赶虻淖兞康闹怠?/span>
常量指針指向常量是指上述兩種指針的組合。它既不能改變所指變量的地址,也不能改變?cè)摰刂诽幍闹怠?/span>
const <指針類型> * const <指針名稱>;
常量指針指向常量的聲明如下:
const int * const ptr;
通過示例來理解。
#include <stdio.h>
int main()
{
int a = 10;
int b = 90;
const int * const ptr = &a;
*ptr = 12;
ptr = &b;
printf('ptr的值為:%d', *ptr);
return 0;
}
以上代碼解釋如下:
我們聲明了兩個(gè)變量'a'和'b',分別賦值為10和90。
我們聲明了一個(gè)常量指針指向常量,并將'a'的地址賦給指針'ptr'。
我們?cè)噲D通過指針'ptr'改變變量'a'的值。
然后,我們?cè)噲D將變量'b'的地址賦給指針'ptr'。
最后,我們打印指針'ptr'所指向的變量的值。
輸出結(jié)果
以上代碼顯示了錯(cuò)誤:'assignment of read-only location '*ptr''和'assignment of read-only variable 'ptr''。因此,我們得出結(jié)論:常量指針指向常量既不能改變地址,也不能改變所指向的變量的值。
聯(lián)系客服