const int a; int const a; const int *a; int * const a; int const * a const; 之间的区别?
8个回答
展开全部
参考别人的说法
const int *a; 是指向整形常量的指针。
int * const a; 是指向整形的常量指针。
int const * const a; 是指向整形常量的常量指针。
const int *a; 是指向整形常量的指针。
int * const a; 是指向整形的常量指针。
int const * const a; 是指向整形常量的常量指针。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
根据你的描述,声明一个整数变量a为整数,整数变量为a,定义一个整数多字符匹配a变量,定义一个多字符变量为a,定义一个多字符变量a为声明。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int intp_test1(const int* _intp)
{
int tmp = 0;
*_intp = 50; //编译器报error:assignment of read-only location ‘*intp1’
_intp = &tmp; //正确。值不可以修改,但指针指向可以修改,不过有效期仅限于函数内。
return 0;
}
int intp_test2(int const* _intp)
{
int tmp = 0;
*_intp = 50; //编译器报error:assignment of read-only location ‘*intp1’
_intp = &tmp; //正确。值不可以修改,但指针指向可以修改,不过有效期仅限于函数内。
return 0;
}
int intp_test3(int* const _intp)
{
int tmp = 0;
*_intp = 50; //正确。指针指向不可以修改,但值可以修改,而且函数返回依然有效。
_intp = &tmp; //编译器报error:assignment of read-only location ‘*intp1’
return 0;
}
int main(int argc, char* argv[])
{
int first = 50;
int second = 60;
const int* intp1 = &first; //正确。编译器甚至没有报warning,first的类型是const int才更严谨吧!
int const* intp2 = &first; //正确。编译器甚至没有报warning,first的类型是const int才更严谨吧!
int* const intp3 = &first;
*intp1 = 80; //编译器报error:assignment of read-only location ‘*intp1’
intp1 = &second; //正确
*intp2 = 99; //编译器报error:assignment of read-only location ‘*intp1’
intp2 = &second; //正确
intp3 = &second; //编译器报error:assignment of read-only location ‘*intp1’
*intp3 = 70; //正确
intp_test1(intp1); //正确。形参和实参类型完全一致。
intp_test1(intp2); //正确。形参和实参本质是一样的,只是写法不同。
intp_test1(intp3); //正确。编译器选择了无视,我猜原因是:反正即便修改了指针指向,也只是在栈里,函数返回后一切复原,不会产生什么实质性破坏。
intp_test2(intp1); //正确。形参和实参类型完全一致。
intp_test2(intp2); //正确。形参和实参本质是一样的,只是写法不同。
intp_test3(intp3); //正确。编译器选择了无视,我猜原因是:反正即便修改了指针指向,也只是在栈里,函数返回后一切复原,不会产生什么实质性破坏。
intp_test3(intp1); //编译器报warning:passing argument 1 of ‘intp_test3’ discards ‘const’ qualifier from pointer target type
intp_test3(intp2); //编译器报warning:passing argument 1 of ‘intp_test3’ discards ‘const’ qualifier from pointer target type
intp_test3(intp3); //正确。形参和实参类型完全一致。
return 0;
}
{
int tmp = 0;
*_intp = 50; //编译器报error:assignment of read-only location ‘*intp1’
_intp = &tmp; //正确。值不可以修改,但指针指向可以修改,不过有效期仅限于函数内。
return 0;
}
int intp_test2(int const* _intp)
{
int tmp = 0;
*_intp = 50; //编译器报error:assignment of read-only location ‘*intp1’
_intp = &tmp; //正确。值不可以修改,但指针指向可以修改,不过有效期仅限于函数内。
return 0;
}
int intp_test3(int* const _intp)
{
int tmp = 0;
*_intp = 50; //正确。指针指向不可以修改,但值可以修改,而且函数返回依然有效。
_intp = &tmp; //编译器报error:assignment of read-only location ‘*intp1’
return 0;
}
int main(int argc, char* argv[])
{
int first = 50;
int second = 60;
const int* intp1 = &first; //正确。编译器甚至没有报warning,first的类型是const int才更严谨吧!
int const* intp2 = &first; //正确。编译器甚至没有报warning,first的类型是const int才更严谨吧!
int* const intp3 = &first;
*intp1 = 80; //编译器报error:assignment of read-only location ‘*intp1’
intp1 = &second; //正确
*intp2 = 99; //编译器报error:assignment of read-only location ‘*intp1’
intp2 = &second; //正确
intp3 = &second; //编译器报error:assignment of read-only location ‘*intp1’
*intp3 = 70; //正确
intp_test1(intp1); //正确。形参和实参类型完全一致。
intp_test1(intp2); //正确。形参和实参本质是一样的,只是写法不同。
intp_test1(intp3); //正确。编译器选择了无视,我猜原因是:反正即便修改了指针指向,也只是在栈里,函数返回后一切复原,不会产生什么实质性破坏。
intp_test2(intp1); //正确。形参和实参类型完全一致。
intp_test2(intp2); //正确。形参和实参本质是一样的,只是写法不同。
intp_test3(intp3); //正确。编译器选择了无视,我猜原因是:反正即便修改了指针指向,也只是在栈里,函数返回后一切复原,不会产生什么实质性破坏。
intp_test3(intp1); //编译器报warning:passing argument 1 of ‘intp_test3’ discards ‘const’ qualifier from pointer target type
intp_test3(intp2); //编译器报warning:passing argument 1 of ‘intp_test3’ discards ‘const’ qualifier from pointer target type
intp_test3(intp3); //正确。形参和实参类型完全一致。
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询