C++指针学习笔记(一)——理解指针地址

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值