As在
Sub New
ActiveSheet.Range(“c9”).End(xlRight).Offset(1,0).Select
Selection.Insert Shift:xlToRight
Selection.Insert Shift:xlToRight
Selection.Insert Shift:xlToRight
End Sub
会输出x地址。但是如果我选择字符数组,比如
int x[3] = {1, 2, 3, 4};
cout<<x;
打印出字符串
您好
让我们说编译器足够聪明,可以理解,在char数组的情况下,打印地址更少,所以它打印出字符串,然后如何打印字符数组地址?
并考虑这个陈述
char x[10]="Hello";
为什么这是合法的,是不是指针只应存储地址?
答案 0 :(得分:1)
它打印&#34;你好&#34;因为operator <<
有一个const char*
的重载(如果你通过x
,那就是你通过的那个),它打印出一个char
并移到下一个char
{1}}直到找到NUL字符。 &#34;你好&#34;最后有一个编译添加的NUL字符,所以你的字符串实际上是&#34; Hello \ 0&#34;。
要获取地址,您可以将其转换为void*
以移除const char*
的重载:
reinterpret_cast<const void*>(x)
为什么这个合法的,Aren指针应该只存储地址?
是的,这正是ptr
正在存储的内容。当你指定一个指针&#34; Hello&#34;这是const char[]
ptr将指向该数组的[0]
。请注意,在这种情况下,首先必须从const char*
到char*
进行转换,该转换已被弃用多年,并且因为C ++ 11非法,因为尝试通过此{{1}编辑指针对象将导致未定义的行为。有些编译器仍允许这样做,但实际上它们应该发出错误。