C++指针分配字符数组的地址

C++ pointer assigning char array's address

本文关键字:地址 数组 字符 指针 分配 C++      更新时间:2023-10-16

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

.app

而不是 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;
}

谁能解释一下?谢谢。

因为这就是声明函数要做的事情。ptr是一个char*(字符指针(,并且有一个专门定义的重载来接受它。

std::cout<<a

实际调用声明为的函数:

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

从链接中,我们了解该函数将做什么:

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

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

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

指针实际上在做它的工作。它实际上不是指针,而是你必须观察的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,因此打印数组的所有字符。

您正在使用指针执行相同的操作。