为什么可以将Char指针变量初始化为字符串,而INT指针变量不能初始化到整数数组
Why can a char pointer variable be initialized to a string but an int pointer variable can not be initialized to an array of integers?
我正在尝试了解字符串,数组和指针之间的关系。
我正在阅读的书有一个程序,其中该程序初始化了一个变量,如下所示:
char* szString= "Name";
我理解的方式是,C风格的字符串只是一系列字符。数组只是指指指针(存储数组的第一个值(和偏移量的速记版本。IE。 array[5]
实际上返回从表达式*(array+5)
进行评估的内容。
因此,从我的理解和测试中,SZSTRING实际上是作为指针初始化的,指向数组存储"名称"的第一个地址。我可以推断出来,因为输出为:
cout << *szstring;
是字符" n"。
我对语句的理解
cout << szstring;
输出字符"名称",是该方法cout将参数szstring解释为字符串类型,并打印出所有字符,直到nul字符。另一方面,用于参数*szstring
使用此方法的不同版本支持C风格字符串。
因此,如果我可以初始化一个char类型指针来解决一个字符中的第一个元素(c-style字符串(,为什么我不能初始化int类型的指针,以作为整数数组中的第一个元素作为如下:
int* intArray = {1,2,3};
c风格的字符串只是一个chars
的数组
正确。
数组只是指指指针(存储数组的第一个值(和偏移量的速记版本。
不,不是真的。
方法cout将参数szstring解释为字符串类型,并打印出所有字符,直到nul字符
cout
不是"方法",而是其operator<<
的工作方式是。
为什么可以将Char指针变量初始化为字符串,而INT指针变量不能将其初始化为整数数组?
简单的答案是字符串文字是特殊的,否则我们将无法使用它们。
在许多方面,包括这种方式,语言标准决定字符串文字和 char*
s。
为什么我不能初始化int类型指针指向整数数组中的第一个元素
c 可以最终扩展了其他指针初始化的语法来执行类似的操作,但实际上并不需要,因为我们具有优越性:
std::vector<int> myInts{1,2,3};
简短的答案是存在字符数组文字,但没有int数组文字。
字符串文字是数组类型的字面价值,它是一个lvalue,因此您可以使用并存储它的地址。该值指定的对象的寿命是永久的,因此在整个程序中获得的指针都是有效的。
相比之下,没有字面的" int
数组"类型,也没有未命名的Int Array lvalues。
不要将其与支撑的初始化列表混淆,不是表达式,因此不是值!支撑列表可用于初始化数组类型的变量,但它们本身不是值。
如果有的话,语言语法中唯一的奇数人是允许初始化带有支撑列表包含的字符串的字符串的字符阵列的字符串: char a[] = {"foo"};
将其视为一种类型复制初始化;a
是字面lvalue的副本。
作为初学者,我也有类似的问题。请查看此帖子和答案。
此const char* szString= "Name"
分配给指针szString
,其内容为"名称"的数组的初始元素的地址(随后是终止' 0'null字符(。
没有从int到int*的隐式转换,而另外0是一种特殊情况,是一个零指针。
- 指针变量在 cout 函数中不起作用
- 如何将指针变量作为引用参数传递?
- 有没有办法在同名类 (c++) 中为对象分配一个指针变量
- 我试图了解在异或操作后指针变量正在更改
- 调用带有指针对象错误的指针变量
- 如何在 cuda 中将结构的指针变量从主机复制到设备
- 非指针变量和类成员上的新放置
- 线路抑制状态错误 C4703 可能未初始化的局部指针变量"back"已使用
- 全局外部指针变量在 DLL 中不可见
- 如何访问在 c++ 中在类内声明的结构类型指针变量?
- C++ 中指针变量的内存释放
- 使用指针变量打印特定的数组变量
- 如何使用构造函数初始化内存地址(指针变量)?
- 如何释放为指针变量本身提供的内存?
- 如果地址已知,如何获取指针变量的名称
- 如何处理参数中的基类和指针变量
- 指针变量 在数组中定位零
- 隐式指针变量,在自动定义中具有另一个指针变量
- 为什么可以将Char指针变量初始化为字符串,而INT指针变量不能初始化到整数数组
- 错误 C4703 可能未初始化的局部指针变量'y'使用