c++ 为什么可以将char指针变量初始化为字符串,但int指针变量无法初始化为整数数组?

参见英文答案 > How can a char pointer be initialized with a string (Array of characters) but an int pointer not with an array of integer?                                     4个
我试图了解字符串,数组和指针之间的关系.

我正在阅读的书有一个程序,它将初始化一个变量,如下所示:

char* szString= "Name";

我理解的方式是,C风格的字符串只是一个字符数组.数组仅仅是引用指针(存储数组的第一个值)和偏移的简写版本.即
数组[5]实际上返回从表达式*(数组5)中评估的内容.

所以,从我的理解和测试中,szString实际上被初始化为指向存储“Name”的数组的第一个地址的指针.我可以推断出这一点,因为输出到:

cout << *szstring;

是字符“N”.

我对声明的理解

cout << szstring;

输出字符“名称”,方法cout将参数szstring解释为字符串类型,并打印所有字符,直到NUL字符.另一方面,对于参数* szstring,使用支持C风格字符串的此方法的不同版本.

因此,如果我可以初始化一个char类型的指针来寻址一个char数组(C风格的字符串)中的第一个元素,为什么我不能初始化一个int类型的指针到整数数组中的第一个元素,如下所示:

int* intArray = {1,2,3};
最佳答案

a C-style string is simply an array of chars

正确.

An array is simply a shorthand version of referring to the pointer (which stores the first value of the array) and an offset.

不,不是真的.

the method cout interprets the argument szstring as a string type and prints out all the characters until the NUL character

cout不是“方法”,但是它的运算符<这样做是对的.

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?

简单的答案是字符串文字是特殊的,否则我们将无法使用它们.

在许多方面,包括这种方式,语言标准规定了字符串文字和字符串的特殊处理.

why can I not initialize an int type pointer to the first element in an array of integers

C可以最终扩展其他指针初始化的语法来做一个类似的事情,但实际上并不需要它,因为我们有很远的优势:

std::vector<int> myInts{1,2,3};

转载注明原文:c++ 为什么可以将char指针变量初始化为字符串,但int指针变量无法初始化为整数数组? - 代码日志