C++指针分配字符数组的地址
C++ pointer assigning char array's address
在我看到的许多例子中,如果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,因此打印数组的所有字符。
您正在使用指针执行相同的操作。
相关文章:
- 将数组的地址分配给变量并删除
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 从 C++ 中的函数返回数组地址问题
- C++,数组有多少个地址?
- 打印字符数组地址的正确方法
- 给定特定内存地址的数组的动态内存分配
- 当我使用需要计算数组单元格地址的模板时,奇怪的C++行为
- 为什么存储在数组中的地址值与其自己的地址相同,它应该指向某个不同的地址(&arr[0])?
- 我编写了一个程序来显示数组的内容,但它显示的是它的地址
- 在 C++ 中交叉动态分配的二维数组时的侵入性值/地址
- 返回数组中值的指针地址
- 创建一个函数来转换数组元素的类型并返回数组的地址
- 在分配指向数组内存地址的指针时,为什么不必使用地址运算符?
- C++指针分配字符数组的地址
- 以 C/C++ 为单位的数组中最小值的地址
- 为什么 C++ 中的字符数组返回其项目而不是地址?
- 字符数组地址和整数数组地址
- 为什么这段代码给出错误......'a'是指针到字符指针,应该存储's'的地址,因为s是指向数组的第一个元素的指针
- 直接从指针/地址访问数组的元素
- 地址数组,带有枚举的返回值