C++;指针给出的数据类型为';int';但与'配合使用效果良好;char'; 我试图学习C++中的指针和引用。我有以下程序 #include <iostream> using namespace std; int main() { // 1st statement / code of block. This portion works fine. char *str = "A"; cout << str << endl; // it outputs A cout << *str << endl; // it outputs A cout << &str << endl; // it outputs 0x23fe40 (memory location) char **b = &str; cout << b << endl; // it outputs 0x23fe40 (memory location) cout << *b << endl; // it outputs A // 2nd statement / code of block. This portion gives error. // int *st = 5; // cout << st << endl; // cout << *st << endl; // cout << &st << endl; // int **c = &st; // cout << c << endl; // cout << *c << endl; return 0; }

C++;指针给出的数据类型为';int';但与'配合使用效果良好;char'; 我试图学习C++中的指针和引用。我有以下程序 #include <iostream> using namespace std; int main() { // 1st statement / code of block. This portion works fine. char *str = "A"; cout << str << endl; // it outputs A cout << *str << endl; // it outputs A cout << &str << endl; // it outputs 0x23fe40 (memory location) char **b = &str; cout << b << endl; // it outputs 0x23fe40 (memory location) cout << *b << endl; // it outputs A // 2nd statement / code of block. This portion gives error. // int *st = 5; // cout << st << endl; // cout << *st << endl; // cout << &st << endl; // int **c = &st; // cout << c << endl; // cout << *c << endl; return 0; },c++,pointers,C++,Pointers,有人能解释一下为什么会这样吗?这两条语句几乎相同,唯一的区别是我在第二条语句中使用了数据类型“int”。这是因为不同的数据类型吗?正如前面提到的,使用str可以隐式创建字符数组,返回的*char指针指向内存中的该数组。因此,当你去引用它时,你会得到字母“A” 您应该意识到的一点是,当您取消对字符串的引用时,您将只获得数组中的第一个字符(返回的指针指向数组中的第一个值)。如果字符串是“AB”而不是“A”,那么*str将只返回“A”,其中as-str将打印“AB” 这不适用于整型变量,因为该变量没有

有人能解释一下为什么会这样吗?这两条语句几乎相同,唯一的区别是我在第二条语句中使用了数据类型“int”。这是因为不同的数据类型吗?

正如前面提到的,使用str可以隐式创建字符数组,返回的*char指针指向内存中的该数组。因此,当你去引用它时,你会得到字母“A”

您应该意识到的一点是,当您取消对字符串的引用时,您将只获得数组中的第一个字符(返回的指针指向数组中的第一个值)。如果字符串是“AB”而不是“A”,那么*str将只返回“A”,其中as-str将打印“AB”

这不适用于整型变量,因为该变量没有初始化到的隐式引用。整数是一个基元,没有引用就不能取消引用,没有指向的对象就不能检索指针。这就是它无法将整数值转换为指向整数值的指针的原因

请注意,您仍然可以声明包含基元值的变量并获取其地址(&st在声明后仍然有效)。如果您想处理使用int值进行内存解引用的问题,您可以处理引用其他变量的问题。例如

int i = 5;
int *st = &i;
int **c = &st;
第一个变量将打印5,第二个变量将打印变量i的地址,第三个变量将打印变量i指针的地址


有趣的东西。基本上,只需四处乱摸,就能感觉到指针之类的东西。

正如人们之前提到的,使用str可以隐式创建一个字符数组,返回的*char指针指向内存中的该数组。因此,当你去引用它时,你会得到字母“A”

您应该意识到的一点是,当您取消对字符串的引用时,您将只获得数组中的第一个字符(返回的指针指向数组中的第一个值)。如果字符串是“AB”而不是“A”,那么*str将只返回“A”,其中as-str将打印“AB”

这不适用于整型变量,因为该变量没有初始化到的隐式引用。整数是一个基元,没有引用就不能取消引用,没有指向的对象就不能检索指针。这就是它无法将整数值转换为指向整数值的指针的原因

请注意,您仍然可以声明包含基元值的变量并获取其地址(&st在声明后仍然有效)。如果您想处理使用int值进行内存解引用的问题,您可以处理引用其他变量的问题。例如

int i = 5;
int *st = &i;
int **c = &st;
第一个变量将打印5,第二个变量将打印变量i的地址,第三个变量将打印变量i指针的地址


有趣的东西。基本上,只是四处乱摸,以了解指针之类的东西。

您希望这种转换如何工作?它可以与char一起工作。为什么我不希望它与int一起使用呢?鉴于您希望使用
5
,您可能希望
“A”
字符。不是,;IIRC,它是一个
常量字符[2]
。我怎样才能让第二条语句工作呢?字符串很特别……它就是这样设计的。int*x=5;//内存中哪里存在5?它没有-它必须放在内存中的某个地方,addr返回…这是为字符串做的;我不知道为什么其他数据类型没有这样做…可能是这样。我不确定它会有多大用处/它会有什么用途。您希望这种转换如何工作?它可以与char一起工作。为什么我不希望它与int一起使用呢?鉴于您希望使用
5
,您可能希望
“A”
字符。不是,;IIRC,它是一个
常量字符[2]
。我怎样才能让第二条语句工作呢?字符串很特别……它就是这样设计的。int*x=5;//内存中哪里存在5?它没有-它必须放在内存中的某个地方,addr返回…这是为字符串做的;我不知道为什么其他数据类型没有这样做…可能是这样。我不确定它会有多大用处/有什么用。