用C ++初始化指针

阿什什

我需要阐明有关C ++中指针初始化基础的概念。根据我的理解,在使用该指针放置一些值之前,必须先为该指针分配一个地址。

int *p;
*p=10; //inappropriate
cout << *p <<"\n";

这可能会显示正确的输出(10),但这可能会导致较大的程序出现问题,因为p最初具有垃圾地址,该地址可以是任何东西,后来也可以在程序中的其他地方使用。所以,我认为这是不正确的,正确的方法是:

int *p;
int x=10;
p=&x;  //appropriate
cout << *p <<"\n";

我的问题是,如果以上理解是正确的,那么对char *同样适用吗?:

const char *str="hello";  // inappropriate
cout << str << "\n";
//OR
const string str1= "hello";
const char str2[6] ="world";
const char *str=str1;  //appropriate
const char *st=str2;  //appropriate
cout << str << st << "\n";

请指教

一些程序员哥们

您对字符串的理解不正确。

让我们以第一行为例:

const char *str="hello";

这实际上是正确的字符串文字如"hello"被编译器转换为常量数组,并且像所有数组一样,它可以衰减为指向其第一个元素的指针。因此,您要做的是str指向数组的第一个字符。

然后让我们继续

const string str1= "hello";
const char *str=str1;

这实际上是错误的。std::string没有对象定义为强制转换为的强制转换运算符const char *编译器会为此提供一个错误。您需要使用c_str函数go获取指向所包含字符串的指针。

最后:

const char str2[6] ="world";
const char *st=str2;  //appropriate

声明和初始化时,这实际上与第一行没有什么不同str正如您所说,这是“适当的”。


关于带有“不适当”指针的第一个示例:

int *p;
*p=10; //inappropriate
cout << *p <<"\n";

这不仅是“不适当的”,还会导致未定义的行为,并且实际上可能会使您的程序崩溃同样,正确的术语是的值p不确定的

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章