标题:最后一个取地址printf语句违法不违法?
只看楼主
堕落之地
Rank: 1
等 级:新手上路
帖 子:57
专家分:5
注 册:2019-3-11
结帖率:100%
已结贴  问题点数:20 回复次数:3 
最后一个取地址printf语句违法不违法?
#include<stdio.h>
int main(){
    int in[10]={0,1,2,3,4,5,6,7,8,9};
    printf("%d\n",in+9);
    printf("%d\n",&in[10]);
}
搜索更多相关主题的帖子: 地址 printf 语句 int main 
2019-04-19 18:14
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:620
专家分:3020
注 册:2011-4-22
得分:20 
越界了,但是c语言不做这方面的检查。
这是不安全行为,类似操作在操作系统中运行会出现不可预料结果。
2019-04-19 18:27
堕落之地
Rank: 1
等 级:新手上路
帖 子:57
专家分:5
注 册:2019-3-11
得分:0 
好的 大佬
2019-04-19 19:15
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
&in[10] 不违法,因为C/C++规定数组最后一个元素的下一个元素的地址是可比较的。
否则就没法写 for( int* p=in; p!=in+10; ++p ) 或 for( int* p=in; p<=in+9; ++p ) 了

&in[11] 是否违法就比较模糊了,因为它没有任何作用,即不能解引用,又不能用于指针比较

你代码违法的地方在 "%d",应该用 "%p"。

2019-04-22 09:14



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-494288-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.232421 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved