我需要阐明有关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] 删除。
我来说两句