const對(duì)很多人來(lái)說(shuō)既陌生又熟悉.可以說(shuō)很棘手的問(wèn)題,有些地方很難理解.我在剛學(xué)C的時(shí)侯,對(duì)它的理解也是很模糊的.好像有點(diǎn)理解,但又說(shuō)不出個(gè)所以然來(lái).在此,就向大家分享,我一直以來(lái)對(duì)它的理解,如有不當(dāng)之處請(qǐng)指教.
const可以說(shuō)一種常量的聲明的關(guān)鍵字,如const int a=2;變量a就是一個(gè)常變量,a的值不能被改變,這個(gè)改變是一定意義上的不能改變.而是說(shuō)值的改變不能直接通過(guò)a這個(gè)符號(hào)來(lái)改變.但事實(shí)上,a的值是可能改變的.如下例子:
#include
int main()
{
const int a=3;
int *p=(int*)&a;
*p=100;
printf("%d",a);
return 0;
}
這樣a的值就被改變了.
const也可以說(shuō)一種只讀的關(guān)鍵字,如int integerArray[10]={0};const int* pointer=integerArray;這里pointer是指向一個(gè)常變量的指針變量.pointer指向可能改變,但它所指向的變量的值就不能直接通過(guò)pointer來(lái)改變.如:*(p+1)=2;這是不可以的.但如果有另外一個(gè)數(shù)組integerArray1,p=integerArray1是可以有.還有指向的變量不可改變,這種不可改變是一定意義的改變.
如下例子:
#include
int main()
{
int array[10]={0};
const int *pointer=array;
int *pointer1=(int*)pointer;
pointer1[0]=1;
printf("%d",array[0]);
return 0;
}
以上例子說(shuō)明了,不能直接通過(guò)pointer改變array,但可能間接通過(guò)pointer來(lái)改變array;
現(xiàn)在說(shuō)一說(shuō)有const聲明常指針,它的聲明不像聲明指向常量的指針形式.它的聲明形式為:int* const pointer; .常指針在編程的過(guò)程中它的指向不能改變.因此,常指針在聲明的時(shí)侯一定要給它賦初值.否則,就不能直接給它賦值.但是,如果一定要給它賦上一定的值,是可以的.如下例子:
#include
int main()
{
int a=2;
int* const p;
int **p1=(int**)&p;
*p1=&a;
printf("%d",*p);
return 0;
}
經(jīng)過(guò)上面的介紹,相信大家對(duì)指向常量的常指針的聲明也不難寫出吧.它的聲明形式:cont int* const p;它就不用作過(guò)多的介紹了,指向常量的常指針就是指向常量的指針與常指針的復(fù)合了.
好了就說(shuō)到這里吧.
const可以說(shuō)一種常量的聲明的關(guān)鍵字,如const int a=2;變量a就是一個(gè)常變量,a的值不能被改變,這個(gè)改變是一定意義上的不能改變.而是說(shuō)值的改變不能直接通過(guò)a這個(gè)符號(hào)來(lái)改變.但事實(shí)上,a的值是可能改變的.如下例子:
#include
int main()
{
const int a=3;
int *p=(int*)&a;
*p=100;
printf("%d",a);
return 0;
}
這樣a的值就被改變了.
const也可以說(shuō)一種只讀的關(guān)鍵字,如int integerArray[10]={0};const int* pointer=integerArray;這里pointer是指向一個(gè)常變量的指針變量.pointer指向可能改變,但它所指向的變量的值就不能直接通過(guò)pointer來(lái)改變.如:*(p+1)=2;這是不可以的.但如果有另外一個(gè)數(shù)組integerArray1,p=integerArray1是可以有.還有指向的變量不可改變,這種不可改變是一定意義的改變.
如下例子:
#include
int main()
{
int array[10]={0};
const int *pointer=array;
int *pointer1=(int*)pointer;
pointer1[0]=1;
printf("%d",array[0]);
return 0;
}
以上例子說(shuō)明了,不能直接通過(guò)pointer改變array,但可能間接通過(guò)pointer來(lái)改變array;
現(xiàn)在說(shuō)一說(shuō)有const聲明常指針,它的聲明不像聲明指向常量的指針形式.它的聲明形式為:int* const pointer; .常指針在編程的過(guò)程中它的指向不能改變.因此,常指針在聲明的時(shí)侯一定要給它賦初值.否則,就不能直接給它賦值.但是,如果一定要給它賦上一定的值,是可以的.如下例子:
#include
int main()
{
int a=2;
int* const p;
int **p1=(int**)&p;
*p1=&a;
printf("%d",*p);
return 0;
}
經(jīng)過(guò)上面的介紹,相信大家對(duì)指向常量的常指針的聲明也不難寫出吧.它的聲明形式:cont int* const p;它就不用作過(guò)多的介紹了,指向常量的常指針就是指向常量的指針與常指針的復(fù)合了.
好了就說(shuō)到這里吧.

