为什么我们在下面的代码中使用ptr而不是* ptr
我对这个简单的C++代码中使用的指针感到困惑。我怀疑是为什么我们没有使用(* ptr)打印字符串而不是(ptr) 。请有人可以帮助我。为什么我们在下面的代码中使用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;
}
*ptr[0] will print only the first character ie "O"
因此,如果您使用
ptr[0] it will print "OMKAR"
因为PTR [N]相当于*(PTR + N)
ptr[n]
相当于*(ptr + n)
,这已经解除引用。所以ptr[0]
返回char *
,而不是char **
和std::ostream
很酷,因为它有一个operator<<
重载它。
因为
int x;
...
ptr[x]=...;
是相当于
int x;
...
*(ptr+x)=...;
@edheal在我的答案你看到一个整数指针? 'x'是整数索引(如问题中的0和1)。 –
@edheal没问题:) –
简单的退出。 char *ptr[3];
有一个包含三个指针的数组。 ptr[0]="OMKAR";
第一个指向“OMKAR”,第二个指针ptr[1]
指向“GURAV”...
当我们想打印char字符串时,只需输入ponter。
请原谅格式化,因为我在我的手机上。
字符*的ptr [3]
是一个指针数组。所以当你这样做时
ptr[1] = "TEXT"
它设置指针字符串文字“TEXT”存储在程序中的地址的指针。 这有点像做
char *var;
var = "TEXT";
它只是包含指向char的数组,或者换句话说,一个字符串数组。
cout
考虑了您给它的类型。
还有的cout
许多不同的重载,此相关的是char
,char *
和PTR这实在是char **ptr
在你的榜样,你有以下数据类型
- PTR - 字符* PTR 3 - 衰减到char ** ptr(Array-to-pointer decay)
- ptr [x] - 它是*(ptr + x)或char *
- * pt [R [X] - 是**(PTR + x)或炭
要了解各后续的行确实
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] - >char
(炭)
的ptr [0] - >char *
(字符指针)
PTR - >char **
(指向字符指针)
现在ADL找到最专门版本,并使用该
- char是不是一个void *
- char是不是一个char *
字符是一个char
字符*可能是一个void * // Implicit conversions
- 字符*是一个char *
- 比无效*
- 字符*更专门的是不是一个字符
所以字符*选择其专门版本
字符**可能是一个void * //隐式转换
- 字符**不是一个char *
- 字符**不是一个char
- 使字符**使用无效*
所以他们写出来
Contents of *ptr[0]:O
Contents of ptr[0] :OMKAR
Contents of ptr :0x27fe00
非常深刻的解释..但我需要一些时间来清楚地掌握你的答案 – Omkar
是什么'ptr1'呢? – Bathsheba
ptr是char *的数组,因此ptr [0] = * ptr和ptr [1] = *(ptr + 1) –
@Bathsheba ptr1无关,我只是用它进行调试,可以评论 – Omkar