c++奇怪的std::cout使用指针的行为
c++ strange std::cout behaviour using pointers
可能的重复:
cout<lt;c++<lt;c
我刚输入文本,突然注意到了。
#include <iostream>
int main()
{
int array[] = {1,2,3,4};
int *p = array;
std::cout << *p << "___" << *(p++) << "n";
// output is 1__1. Strange, but I used brackets! it should be at
// first incremented, not clear.
p = array;
std::cout << *p << "___" << *(++p) << "n";
// output is 2_2 fine, why first number was affected? I didn't intend
// to increment it, but it was incremented
p=array;
std::cout << *p << "___" << *(p + 1) << "n";
// output is 1_2 - as it was expected
p = array;
return 0;
}
这种行为对我来说很奇怪,为什么会这样?
您正在导致未定义的行为,所以任何事情都可能发生,没有必要猜测原因。
表达式
std::cout<<*p<<"___"<<*(p++)<<"n"
举个例子:<<
之间所有事物的求值顺序都是未指定的,因此*p
和*(p++)
是不按顺序排列的(即编译器不需要先做任何一个)。你不允许修改一个变量,然后在没有修改和使用顺序的情况下使用它,因此这会导致未定义的行为。
同样的事情也适用于该程序中的所有其他地方,在这些地方,变量被修改并在同一表达式中单独使用。
相关文章:
- 带有 cout 的指针在C++
- cout 指针时的实际数字
- 指针变量在 cout 函数中不起作用
- printf() 和 std::cout 在指针方面的区别
- 打印空指针时,std::cout 可以打印 "NULL" 而不是 0 吗?
- 为什么 cout 语句在传递指向函数的指针时没有执行?
- 为什么取消引用的指针指向指针的 std::cout 会导致 -fsanitize=地址投诉?
- 将空指针写入 std::cout 可防止以后的写入
- 带有 cout 和指针的运算符优先级
- C++ Cout 在使用指针时崩溃
- Cout删除了(未签名的字符)指针,给了我意外的结果
- C++:带有cout和指向char的指针的无法解释的行为
- cout一个字符串流,但打印一个指针
- 使用COUT带有指针值的错误
- std :: cout null char*指针中止该程序
- 超载COUT查看指针内部的内容
- c++奇怪的std::cout使用指针的行为
- 变量的指针和cout地址
- 对象层次结构员工程序 - 取消引用 cout 的指针
- 为什么 printf() 在指针中显示与 cout 不同的地址输出C++