C语言常量指针
示例
单指针
指向一个指针int
指针可以指向不同的整数,并且int可以通过指针更改。此代码示例将b指向,intb然后将其b值更改为100。
intb;
int*p;
p=&b; /*OK*/
*p=100; /*OK*/
指向一个指针constint
指针可以指向不同的整数,但int不能通过指针更改的值。
intb;
constint*p;
p=&b; /*OK*/
*p=100; /*CompilerError*/
const指向int
指针只能指向1,int但int可以通过指针更改其值。
inta,b;
int*constp=&b;/*OKasinitialisation,noassignment*/
*p=100; /*OK*/
p=&a; /*CompilerError*/
const指向constint
指针只能指向一个,int并且int不能通过指针更改。
inta,b;
constint*constp=&b;/*OKasinitialisation,noassignment*/
p=&a; /*CompilerError*/
*p=100;/*CompilerError*/
指针到指针
指向一个指针的指针int
这段代码将的地址分配p1给double指针p(然后指向)int*p1(指向int)。
然后更改p1为指向inta。然后将a的值更改为100。
voidf1(void)
{
inta,b;
int*p1;
int**p;
p1=&b;/*OK*/
p=&p1;/*OK*/
*p=&a;/*OK*/
**p=100;/*OK*/
}
指向a的指针constint
voidf2(void)
{
intb;
constint*p1;
constint**p;
p=&p1;/*OK*/
*p=&b;/*OK*/
**p=100;/*error:assignmentofread-onlylocation‘**p’*/
}
指向const一个指针的指针int
voidf3(void)
{
intb;
int*p1;
int*const*p;
p=&p1;/*OK*/
*p=&b;/*error:assignmentofread-onlylocation‘*p’*/
**p=100;/*OK*/
}
const指向的指针int
voidf4(void)
{
intb;
int*p1;
int**constp=&p1;/*OKasinitialisation,notassignment*/
p=&p1;/*error:assignmentofread-onlyvariable‘p’*/
*p=&b;/*OK*/
**p=100;/*OK*/
}
指向的const指针constint
voidf5(void)
{
intb;
constint*p1;
constint*const*p;
p=&p1;/*OK*/
*p=&b;/*error:assignmentofread-onlylocation‘*p’*/
**p=100;/*error:assignmentofread-onlylocation‘**p’*/
}
const指向的指针constint
voidf6(void)
{
intb;
constint*p1;
constint**constp=&p1;/*OKasinitialisation,notassignment*/
p=&p1;/*error:assignmentofread-onlyvariable‘p’*/
*p=&b;/*OK*/
**p=100;/*error:assignmentofread-onlylocation‘**p’*/
}
const指向的const指针int
voidf7(void)
{
intb;
int*p1;
int*const*constp=&p1;/*OKasinitialisation,notassignment*/
p=&p1;/*error:assignmentofread-onlyvariable‘p’ */
*p=&b;/*error:assignmentofread-onlylocation‘*p’*/
**p=100;/*OK*/
}