const int a; int const a; const int *a; int * const a; int const * a const; 之间的区别?

请具体指出差别之处... 请具体指出差别之处 展开
 我来答
帐号已注销
2019-03-04
知道答主
回答量:1
采纳率:0%
帮助的人:773
展开全部
参考别人的说法
const int *a; 是指向整形常量的指针。
int * const a; 是指向整形的常量指针。
int const * const a; 是指向整形常量的常量指针。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友22e70afc
2017-10-17 · 知道合伙人互联网行家
百度网友22e70afc
知道合伙人互联网行家
采纳数:195 获赞数:387

向TA提问 私信TA
展开全部
根据你的描述,声明一个整数变量a为整数,整数变量为a,定义一个整数多字符匹配a变量,定义一个多字符变量为a,定义一个多字符变量a为声明。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
leeontyl
2018-01-31
知道答主
回答量:37
采纳率:0%
帮助的人:8.9万
展开全部
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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式