C++ 指针:int* 和 char*
int* 指针
#include<iostream>
#include<string>
using namespace std;
int main(){
int a = 300;
int* p = &a; // 定义的是 int* 指针类型的变量p
cout << *p << endl; // *为解引用符,取出p所指向的内存地址内储存的变量值
cout << p << endl; // 变量a在内存中的储存地址
}
运行结果:
char* 指针
#include<iostream>
#include<string>
using namespace std;
int main(){
char a = 'a';
char* p = &a; // 定义的是 char* 指针类型的变量p
cout << *p << endl;
cout << p << endl;
}
运行结果:
同样的代码,为何当指针变成 char* 类型时无法打印出指针p的内容(也就是 char a 在内存中的储存地址)?
这是因为在 C++ 中,operator <<
在解析 char*
类型的变量时会将其解释为 C string
类型,然后在打印的时候打印出 char
类型的结果而不是其地址。
如果想要得到 char
类型变量在内存中储存的地址,需要对指针进行类型的转换,将 char*
类型的指针转换为 void*
类型的指针。
#include<iostream>
#include<string>
using namespace std;
int main(){
char a = 'a';
char* p = &a; // 定义的是 char* 指针类型的变量p
cout << *p << endl;
cout << (void*)p << endl;
}
运行结果:
如此便可以得到 char a
在内存中的储存地址。