1.定义:int *const ptr;下面哪种说法是正确的()
-
ptr不可修改,*ptr可修改
-
ptr不可修改,*ptr不可修改
-
ptr可修改,*ptr不可修改
-
ptr可修改,*ptr可修改
const 的作用就是封锁它后面的东西,即后面的不可改变。
对于 int *const ptr; 没有const关键字时,为int* ptr 此时ptr是指向int的指针。加上const后,const修饰并封锁ptr。即ptr的指向不可改变。
同理 int const* ptr(等同 const int *ptr) 。const修饰 * 解引用,即 指针指向的内容不可改变。
另外,有一个口诀:
* (指针)和 const(常量) 谁在前先读谁:*象征着地址,const象征着内容;谁在前面谁就不允许改变。
常量指针:指向的地址可以变,但内容不可以重新赋值,内容的改变只能通过修改地址指向后变换。
指针常量:指向的地址不可以重新赋值,但内容可以改变,必须初始化,地址跟随一生。
2.有以下程序,程序运行后的输出结果是( )。
int main()
{
int a = 3, b = 4, c = 5, d = 2;
if (a>b)
if (b>c)
printf("%d", d++ + 1);
else
printf("%d", ++d + 1);
printf("%d\n", d);
}
解答:2
第二个if和else组成了第一个if的执行语句,及等价于
if(a>b)
{
if(b>c) printf("%d",d++ +1);
else printf("%d",++d +1);
}
printf("%d\n",d);
-
const void print();
-
void const print();
-
void print() const;
-
void print(const);
const修饰类的成员函数,一般放在函数体后,如 void fun() const;
常成员函数格式:
类型说明符 函数名(参数表)const;
int GetX() const; //声明常成员函数
const void print(const int num)const 第一个const修饰返回类型 第二个const修饰参数 第三个const修饰调用对象
4.有函数定义:
void test(int a){}
void test(float a){}
则以下调用错误的是:
-
test(1);
-
test(‘c’);
-
test(2+’d’);
-
test(0.5);
-
编译器会提示参数不匹配,但是不匹配的原因是:
类型转换只能从下往上自动转换,而不能自动从上往下转换。
0.5默认是double类型,既不能转换成float类型,也不能转换成int类型。故会提示参数不匹配。
'c'是char类型,会自动转换为int,