C++指针学习笔记
关于存储指针地址的实验
首先,申请一个2字节的字符数组,并将该数组地址强制赋给长度同为2字节的short int 指针,观察short int 指针内容是否与字符数组相对应。
其次,改变short int 指针的内容,观察字符数组是否相应变化。
主要代码如下:
/***************************************************************
关于存储指针地址的实验
申请一个2字节的字符数组,并将该数组地址强制赋给长度同为2字节的short int 指针,
观察short int 指针内容是否与字符数组相对应。
其次,改变short int 指针的内容,观察字符数组是否相应变化。
****************************************************************/
#include<iostream>
#include<iomanip>
using namespace std;
int main() {
char* list = new char[2]; //list数组占用2字节
list[0] = '1'; //对应ascii值为0x31,在内存中以0x31存储
list[1] = '2'; //对应ascii值为0x32,在内存中以0x32存储
cout << "list.addr:" <<setiosflags(ios::uppercase)<<hex<<int(list) << endl;
cout << "list[0].addr:" << setiosflags(ios::uppercase) << hex <<int(&list[0]) << endl;
cout << "list[1].addr:" << setiosflags(ios::uppercase) << hex << int(&list[1]) << endl;
//可以发现list[0]和list[1]相临,且各占用一个字节;list的地址与list[0]重叠。
short int* y = (short int *)list;
//把list指向的地址强制赋给一个占用2个字节的短整型变量y,猜想y的地址和list存储空间应当完全重叠。
cout << "y.addr:" << hex<<y<< endl;
//可以检验y的地址与list地址相同
cout << "y.value:" <<hex<<*y<< endl;
//从list空间中取y值,靠前的空间存低位值,靠后的存高位值,因此,y=list[1]list[0]=0x3231;
*y = 0x4241; //ascii码对应字符分别为B、A,逆序后存在list空间里应该是AB
cout << "list:" << list[0]<<list[1] <<endl;
//输出结果为AB,请思考为何不直接cout<<list? 因为list中没有人为写入结束符'\0',所以会把list[1]之后的字节也输出
getchar();
return 0;
}