我正在学习C++,当我试图打印一个数组的内容时,我遇到了一些困惑。 我有一个数组,其中有两个值,2和3。 当我想打印如下值时:
int* test = myApp.countDivisions(5);
std::cout << "Horizontal: " << *test<< std::endl;
std::cout << "Vertical: " << *(test+1) << std::endl;
我得到:
Horizontal: -858993460
Vertical: -858993460
但当我写到:
int* test = myApp.countDivisions(5);
int foo = *(test);
int boo = *(test+1);
std::cout << "Horizontal: " << foo << std::endl;
std::cout << "Vertical: " << boo << std::endl;
我得到:
Horizontal: 2
Vertical: 3
我不明白为什么会发生这种事。 如果有人能解释为什么会发生这种行为,那就太好了! 我知道我不应该在C++中使用C数组,但是我仍然有兴趣了解这里发生了什么!
编辑:我在第一个示例中修改了一个错误
我认为打印*int
是一种未定义的行为--它有点没有意义。 此表达式是一个类型。 这有点像说“here is human”而不是“where is the human call bob”(好吧,有点垃圾的类比),类型本身没有地址。
第二个示例int*test
是一个名为test的变量,其类型为int*
(指向整数的指针)。 您将指针test
的值设置为某个对象(无论MyApp.CountDivisions(5);返回什么-您应该告诉我们返回什么)。
那么:
int foo = *(test);
int boo = *(test+1);
foo是一个整数变量,您将其设置为测试指向的值--而不是地址本身。 BOO
设置为下一个地址的内容(测试的地址+1)。
如果要打印指针的地址,则应执行以下操作:
std::cout << "Horizontal: " << test << std::endl;
如果要打印指针所指向的值,则应执行以下操作:
std::cout << "Horizontal: " << *test << std::endl;
这称为取消引用。 请参阅以下小示例:https://godbolt.org/z/czhbq6