我正在学习OOP课程,但我是C ++的新手。我的导师向我们介绍了C ++中的字符数组。他说,要在C ++中获取字符数组的基址,可以使用以下任一方法:
char* a = "Test String";
cout << &a; // Prints base address of char array
或
char* a = "Test String";
cout << (int*)a;
但是当我尝试两个相同的char数组时,我得到了不同的结果。两者有什么区别?
答案 0 :(得分:12)
更改讲师。这是无稽之谈。第一个片段采用指针的地址(不字符数组)。第二个片段将char
指针转换为指向int
的指针,并打印转换后的指针。
执行此操作的可能原因是,如果您尝试打印指向char
的指针,编译器将选择operator <<
的特殊重载并打印字符串而不是指针。但是,我宁愿将其转换为void*
而不是int*
。原因是转换为void*
可以使用更安全的static_cast
。
答案 1 :(得分:4)
如果你没有犯错误,你的导师就给你提供了不好的例子。实际代码应为:
char a[] = "Test String";
cout << &a; // Prints base address of char array
vs
char a[] = "Test String";
cout << static_cast<void *>( a ); // Prints base address of first element of char array
注意,在C ++中不推荐将字符串文字分配给char *
,它应该是const char *