社区
C++ 语言
帖子详情
小指针输出问题
billykobe1
2009-04-25 10:43:14
#include<iostream>
using namespace std;
int main()
{
int a=2,*p=&a,*q=&a;
cout<<++*p<<" "<<a<<" "<<*q<<endl;
cout<<a<<" "<<*p<<endl;
return 0;
}
为什么答输出是
3 2 2
3 3
而不是
3 3 3
3 3
不是进行++*p后,变量a的值马上就变成了3么?怎么后面a,*q的值输出还是2啊!而在另一行里又变成了3!why??
...全文
175
19
打赏
收藏
小指针输出问题
#include using namespace std; int main() { int a=2,*p=&a,*q=&a; cout<<++*p<<" "<<a<<" "<<*q<<endl; cout<<a<<" "<<*p<<endl; return 0; } 为什么答输出是 3 2 2 3 3 而不是 3 3 3 3 3 不是进行++*p后,变量a的值马上就变成了3么?怎么后面a,*q的值输出还是2啊!而在另一行里又变成了3!why??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
z15881328993
2009-04-26
打赏
举报
回复
3 3 3
3 3
billykobe1
2009-04-26
打赏
举报
回复
是不是压入栈时就改变了a的值???还是弹出数据时才改变a的值!!!>>>????
sanguomi
2009-04-26
打赏
举报
回复
又是这种SB题目
billykobe1
2009-04-26
打赏
举报
回复
我用Visual C++ 6.0的,,结果就是
3 2 2
3 3
fly_feng
2009-04-26
打赏
举报
回复
我在VC6下跑的结果是:
3 2 2
3 3
在VS2005下跑的结果是:
3 3 3
3 3
是不是cout参数入栈顺序随着不同的编译器实现而有所不同...?
hityct1
2009-04-26
打赏
举报
回复
vs2008的结果全是3
T技术沙龙
2009-04-26
打赏
举报
回复
[Quote=引用 2 楼 deltamaster 的回复:]
我的运行结果是
3 3 3
3 3
[/Quote]
用的是什么编译器啊
taoyanxu1989
2009-04-26
打赏
举报
回复
[Quote=引用 4 楼 onlinewan 的回复:]
引用 3 楼 deltamaster 的回复:
引用 1 楼 onlinewan 的回复:
因为cout是从右向左输出的
乱讲。
哈哈,打太快,描述错误,不好意思
我的意思是:cout参数入栈的顺序是从右到左,输出又是从栈顶开始,所以会有楼主描述的现象。
[/Quote]
学习了
deerwin1986
2009-04-26
打赏
举报
回复
COUT的传参顺序决定了这个结果 从右向左...
相当于_CDECL的...
deltamaster
2009-04-26
打赏
举报
回复
根据ISO C++,一定是全为3。
用VC++ 6就不敢保证了,因为很多东西都不符合ISO C++。
而这种写法本身就不是什么好东西。
aaaa3105563
2009-04-26
打赏
举报
回复
编辑器·········
thinkboy234
2009-04-25
打赏
举报
回复
同意四楼的 cout把数据压入栈 是从左往右 一次压入 然后出栈时 自然就从右往左了
deltamaster
2009-04-25
打赏
举报
回复
抱歉,据我了解的<<符是从左向右结合的。
cout通过<<符与右值表达式完成输出过程,并返回一个cout,这样才能实现连续<<运算。
对吗?
yuhongpingimu
2009-04-25
打赏
举报
回复
你用的什么编译器在?我的是
3 3 3
3 3
deltamaster
2009-04-25
打赏
举报
回复
第四个帖子看不到,回复一下。
onlinewan
2009-04-25
打赏
举报
回复
[Quote=引用 3 楼 deltamaster 的回复:]
引用 1 楼 onlinewan 的回复:
因为cout是从右向左输出的
乱讲。
[/Quote]
哈哈,打太快,描述错误,不好意思
我的意思是:cout参数入栈的顺序是从右到左,输出又是从栈顶开始,所以会有楼主描述的现象。
deltamaster
2009-04-25
打赏
举报
回复
[Quote=引用 1 楼 onlinewan 的回复:]
因为cout是从右向左输出的
[/Quote]
乱讲。
deltamaster
2009-04-25
打赏
举报
回复
我的运行结果是
3 3 3
3 3
onlinewan
2009-04-25
打赏
举报
回复
因为cout是从右向左输出的
C语言中的
指针
输出
问题
C语言中的
指针
输出
问题
#include void main() { double* PrintfArg; double* fun(int a[]); PrintfArg = fun(a); printf("%lf,%lf\n",*PrintfArg,*(PrintfArg+1)); } double *fun(int a[50]) { doub
c语言
指针
顺序
输出
,
指针
问题
,按顺序
输出
。。。
该楼层疑似违规已被系统折叠隐藏此楼查看此楼输入4个数,然后按重小到大
输出
。。。用到了刚学的
指针
, 可总是编译不出来? 求各位指点一下,这里先谢过了。。。#includemain(){ int a,b,c,d,p,q,t;int *h,*m,*k;void mia(int *x,int *y,int *z);scanf("%d %d %d %d",&a,&b,&...
C++ char * 字符
指针
输出
问题
这里就和cout的重载有关系了,char * 会被特殊处理为字符串,作为字符串
输出
。我们都知道字符串末尾默认会有’\0’作为结束符,但是单个字符是没有的,当我们cout
输出
时,就会导致没有结束字符一直向后面读取,出现
问题
。其实很简单,要实现
输出
指针
的效果,可以使用printf 来实现,就不会出现那样的
问题
了。近来在学习C++的时候,发现一个有趣的事情,就是当我们
输出
字符
指针
的时候会乱码等情况。上来这段代码运行完成时,出现了我们不想要的结果。
char *
输出
的
问题
,以及
指针
的
问题
char *word="again"; cout<<word<<endl; cout<<(*word)<<endl;
输出
结果为:again achar *word="again";表示在静态存储区分配空间,并把“again”放在内存区域,因为静态存储区里的数据是不能改变!!!而在栈了也分配空间,并把"again”在静态存储区的首地址放在栈里的内存中
C++ char
指针
(字符
指针
)及其
输出
问题
在上一章中, 详细讲解了普通
指针
一维数组的用法, 现在来介绍一下 字符
指针
如果不是你想查看的内容, 可以看:
指针
目录 char
指针
的声明方式与普通
指针
一致, 但有一些特殊的地方 char
指针
可以看作是字符串, 比如说: const char *str="HelloWorld!"; 如果对 const 比较陌生, 可以看这里 对于字符串
指针
的创建, 上面的是一种, 而我本人更建议申请空间, 释放空间的标准
指针
操作 比如说这里: #include <iostream> #
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章