我对这个简单的c ++代码中使用的指针感到困惑。我怀疑为什么我们没有使用(* ptr)来打印字符串而不是(ptr)。请有人帮帮我。
#include<iostream>
using namespace std;
int main()
{
char *ptr[3];
ptr[0]="OMKAR";
ptr[1]="GURAV";
//char *ptr1="HELLO";
cout<<"Contents of ptr[0]:"<<ptr[0]<<endl;
cout<<"Contents of ptr[1]:"<<ptr[1]<<endl;
}
答案 0 :(得分:2)
*ptr[0] will print only the first character ie "O"
所以,如果你使用
ptr[0] it will print "OMKAR"
因为ptr [n]相当于*(ptr + n)
答案 1 :(得分:1)
因为
int x;
...
ptr[x]=...;
相当于
int x;
...
*(ptr+x)=...;
答案 2 :(得分:1)
cout
考虑了你给它的类型。
cout
有许多不同的重载,这里的相关内容是char
,char *
和ptr,它真的是char **ptr
在您的示例中,您有以下数据类型
找出每个后续行的内容
std::cout<<"Contents of *ptr[0]:"<<*ptr[0]<<std::endl;
std::cout<<"Contents of ptr[0] :"<<ptr[0]<<std::endl;
std::cout<<"Contents of ptr :"<<ptr<<std::endl;
当cout
被定义为类似的东西时(非常简化)
class ostream {
public:
ostream& operator<< (const void *);
ostream& operator<< (const char *);
ostream& operator<< (const char);
};
ostream cout;
使用ADL(Argument-Dependent Lookup) or König Lookup我们首先需要找到类型
* ptr [0] - &gt; char
(char)
ptr [0] - &gt; char *
(指向char的指针)
ptr - &gt; char **
(指向char的指针)
现在ADL找到最专业的版本并使用
char是一个char
char *可以是void * // Implicit conversions
所以char *选择其专用版
char **可能是空的* //隐式转换
所以他们最终写作
Contents of *ptr[0]:O
Contents of ptr[0] :OMKAR
Contents of ptr :0x27fe00
答案 3 :(得分:0)
ptr[n]
相当于*(ptr + n)
,已被解除引用。因此,ptr[0]
会返回char *
,而不是char **
而std::ostream
很酷,因为它已经为operator<<
重载了。
答案 4 :(得分:0)
这很简单。 char *ptr[3];
有一个包含三个指针的数组。 ptr[0]="OMKAR";
第一个指向“OMKAR”,第二个指针ptr[1]
指向“GURAV”......
当我们想要打印char字符串时,只需要cout the ponter。
答案 5 :(得分:0)
请原谅格式化,因为我在手机上。
char * ptr [3]
是一个指针数组。所以当你这样做时
anonymous
它将指针设置为字符串文字“TEXT”存储在程序中的地址。 这有点像做
ptr[1] = "TEXT"
它只是一个包含指向char的指针的数组,换句话说,是一个字符串数组。