异常beteen一个char poiner和一个整数指针

问题描述:

int *a; 
*a=3; 
cout<<a; 

为什么上面的代码片断显示内存地址,而下面的代码片段显示整个字符串本身?异常beteen一个char poiner和一个整数指针

char *a; 
a="string"; 
cout<<a; 

我如何分配“串”直接一个而在INT指针的情况下是不可能的? 分配“串”为指针一个应更换地址本身,对不对? 如果情况并非如此,请详细说明编译此代码时发生的情况。

+3

'* a = 3'表现出未定义的行为,通过取消引用未初始化的指针。 –

+0

第二个示例调用'operator

在第一个例子,int *a;创建一个指向int有一个未定义的值,即你没有指定它指向任何地方。

然后,第二行放置在随机位置值3的a这很可能导致程序崩溃,但并不总是指向。

第三行打印指针作为存储器地址的值。

在第二个示例中,char *a;创建了一个指向char的未定义值的指针,即您未将它指定给任何指向的位置。

第二行然后分配a指向常量字符串string

第三行输出a的字符串值,因为std :: stream类专用<<运算符,用于输出字符串char*

std:ostream专门基于所述数据类型的<<运算符。对于char*,它假设一个字符串,因为这是C++进化的C语言中使用的惯例。对于其他指针类型,运算符<<只显示指针,因为没有建立终止非char数组的约定(char数组字符串由字符值零终止)。

a = "string"的情况下,"string"的地址将被存储(尽管一个好的编译器会警告你关于const的问题)。这是一种仅适用于字符数组的特殊情况语法 - 同样,因为这是C语言管理文本的方式。另外,这种为char类型提供特殊情况处理的趋势在多年以来一直困扰着我多次,当我尝试显示一个8位整数时,却显示出一个字符 - 强制我投射。

uint8_t i=65; 
cout<<"results: "<<i<<", "<<(int)i<<"\n"; 

results: A, 65