C ++指针指定char数组的地址

时间:2017-08-28 02:29:28

标签: c++

在许多示例中,我看到,如果int x = 0; int *ptr; ptr = &x则ptr正在保存x的地址信息。我有点困惑为什么如果以下代码执行相同的操作。当我打印ptr时,它会显示:

  

应用

而不是p [0]的地址。

#include <iostream>
#define show(a)     std::cout<<a<<std::endl;
#define Syswait     std::system("pause");

int main() {


char p[] = "app";
char *ptr;
ptr = &p[0];
show(ptr);

Syswait;
}

有人可以解释一下吗?感谢。

2 个答案:

答案 0 :(得分:2)

因为这是声明函数的功能。 ptr是一个char*(字符指针),并且有一个专门定义为接受它的重载。

std::cout<<a

actually calls函数声明为:

template< class Traits >
basic_ostream<char,Traits>& operator<<( basic_ostream<char,Traits>& os,  
                                        const char* s );

从链接中我们了解该功能将做什么:

  

构造并检查岗哨对象后,插入连续   字符数组中指向第一个元素的字符   由s。

为避免这种情况,请转发至void *

std::cout << (void *)a;

答案 1 :(得分:2)

指针实际上正在完成它的工作。它实际上不是指针,但它是你必须观察的cout。

考虑以下代码

#include<iostream>
using namespace std;
int main(){
Char p[ ] = "app";
Cout<<p<<endl;
Return 0;
}

在上面的代码cout<<p<<endl;中,p将输出p的第0个索引的地址。如果使用指针存储第0个索引,则它是相同的。

Cout会将char变量的指针视为cstring,因此会打印数组的所有字符。

你正在使用指针做同样的事情。