与其他原语相比,char输出指针的输出方式不同?

时间:2018-01-03 11:05:52

标签: arrays pointers char

我有这个代码,它会为char指针产生意外的结果:

#include <iostream>
#include <stdlib.h>
#include <string>

void main(int argv, char* argc[]) {
char* test1 = new char[7];
test1[0] = 'H';
test1[1] = 'a';
test1[2] = 'l';
test1[3] = 'e';
test1[4] = 't';
test1[5] = 'y';
test1[6] = 'a';

char* t2 = &test1[3];

std::cout << *t2 << std::endl;
std::cout << t2 << std::endl;
std::cout << std::endl;

int v[] = { 1,2,3,4 };
int* v2 = &v[0];

std::cout << *v2 << std::endl;
std::cout << v2 << std::endl;
std::cout << std::endl;

float f[] = { 0.2, 0.4, 0.6 };
float* f2 = &f[1];

std::cout << *f2 << std::endl;
std::cout << f2 << std::endl;
std::cout << std::endl;

std::string str = "A_string";
std::string *str2 = &str;

std::cout << *str2 << std::endl;
std::cout << str2 << std::endl;
std::cout << std::endl;

std::cin.ignore();

}

此输出是可变的,但通常类似于此enter image description here

发生了什么?对于int,float和string,打印地址打印指针地址并打印指针打印正确的值。但是,对于char数组,打印指针时也会输出正确的值,打印地址会打印出数组的最后4个元素以及每次运行时变化的一堆垃圾。

是否存在导致此问题的char或者我是否只是设置了一个时髦的设置?我尝试用括号初始化char数组,但结果相同。

1 个答案:

答案 0 :(得分:0)

没关系。我想解决方法就是:

std::cout << *t2 << std::endl;
std::cout << (void*)t2 << std::endl;
std::cout << std::endl;

还发现: Why is address of char data not displayed?