#include<iostream> using namespace std; int main(){ int a=12; char *p; p =(char*)&a; *p='a'; cout<<(char*)(&a); cout<<&a; cout<<*(&a); return 0; }
&a返回的是一个地址(也可以称为指针)该指针类型与a的数据类型一致 要取出该值 必须告诉计算机这是一个地址要用这个地址去取出值 *(&a) 用于取出该地址对应的内存地址的值
p = &a;若上面直接这样赋值将会报错:这是因为&a 返回的是整型数据的地址 而p确是字符型地址 应该将整型指针转换成字符型指针 这里将把其当作字符型数据的地址 查找相关的地址 读者可以观察到上面
cout<<(char*)(&a);和
cout<<*(&a);
结果是不一样的
#include<iostream> using namespace std; int main(){ int a=12; char *p; p =(char*)&a; //p=&a; *p='a'; //cout<<p<<""<<endl; //cout<<&a; cout<<(char*)(&a)<<endl; cout<<&a<<endl; cout<<*(&a)<<endl; *(&a)=98; cout<<*p; return 0; }
error: cannot convert ‘int*’ to ‘char*’ in assignment p=&a;
#include<iostream> using namespace std; void func(int size,int *p,int p1[]){ cout<<"p1地址"<<p1<<endl; for(int i=0;i<size;i++){ cout<<p1[i]<<(p+i)<<" "<<*(p+i)<<endl; } } int main(){ #include<iostream> using namespace std; //p1相当于别名 void func(int size,int *p,int p1[]){ cout<<"p1地址"<<p1<<endl; for(int i=0;i<size;i++){ cout<<&(p1[i])<<(p+i)<<" "<<*(p+i)<<endl; } } int main(){ int a[4]={1,2,3,1}; cout<<"地址"<<a<<endl; func(4,a,a); return 0; }