|
|
检测点7-11
1.若左值的类型分别是指向const char的指针、const char和const限定的指向char的指针,则左值转换后,这些值的类型各是什么?
答:分别是const char、char和char *。
2.在源文件c0708.c中,语句S2、S5、S7、S12和S17的第二个参数都是左值且要执行左值转换,转换后的值各自是什么类型?
答:直接就程序以注释的形式作答。
void f1 (const int * p1)
{
* p1 = 65533; //S1
printf ("%d\n", * p1);//S2:左值* p1的类型是const int,故左值转换后的类型是int。
}
void f2 (const int * const p2)
{
int m = 0;
p2 = & m; //S3:非法!
* p2 = 260; //S4:非法!
printf ("%d\n", * p2); //S5:左值* p2的类型是const int,故左值转换后的类型是int。
}
int main (void)
{
const int cx = 0;
cx = 65533; //S6:非法!
printf ("%d\n", cx); //S7:左值cx的类型是const int,故左值转换后的类型是int
* (int *) & cx = 65533; //S8:合法,但非常危险!
int x = 0, y = 0;
const int * pc = & x;
* pc = 77; //S9:非法!
pc = & y; //S10:合法
* pc = 78; //S11:非法,与指向哪个对象无关!
printf ("%d\n", * pc); //S12:左值* pc的类型是const int,故左值转换后的类型是int。
f1 (& x); //S13:合法
f1 (pc); //S14:合法
const int * const cpc = & x;
* cpc = 79; //S15:非法!
cpc = & y; //S16:非法!
printf ("%d\n", * cpc); //S17:左值* cpc的类型是const int,故左值转换后的类型是int。
f2 (& x); //S18:合法
f2 (cpc); //S19:合法
}
3.若对象的类型是const限定的指向int的指针,则该对象的值可以修改吗?该对象所指向的对象的值可以修改吗?
答:该对象不可修改,该对象指向的对象可以修改。
|
|