指针

指针

定义:数据类型和地址
概念:为了方便访问内存中内容,系统给每一个内存单元(字节)分配一个编号,该编号称为地址,也就是指针

指针变量

定义:类型 变量名
类型 (指针指向的类型:保存哪种数据类型变量的地址) 指针变量名;
区别开:指针变量地类型和指着变量指向的类型
指针自己的内存和和指针指向的内存
所占字节数:4个字节
指针运算符:&取地址符 获取变量地首地址
* 解析引用符 取内容 读取(写入)看指针指向的类型
小端和大端:1个变量的内存大小>=2个字节
小端:低位存在低地址,高位存在高地址
void型指针:指向任意类型
void
p 不能直接读取数据、偏移
0地址:不能存储数据,可以偏移
int *p=0;NULL, nullptr
指针变量赋值的方式:
1.相同类型变量的地址
2.相同类型的指针变量;

#include <iostream>
using namespace std;
int main()
{
	int n;
	//定义时*没有实际意义,仅仅表示定义的是指针
	int *pn;//pn的类型是int*  int型指针
	pn = &n;
	cout << pn << endl;//指针变量指向的地址
	cout << &n << endl;//变量n自己的地址
	cout << &pn << endl;//指针变量自己的地址
	//*pn等价于pn指向的变量n
	*pn = 100;//等价于n=100;
	cout << n << endl;
	n = 0x12abcd34;
	//第一种情况:指针指向的类型<变量的类型
	//指针强转值不会改变
	short *pshort = (short*)&n;
	cout<<hex<< *pshort << endl;//cd34

内存图

0x8 0x7 0x6 0x5 0x4 0x3 0x2 ox1
null null null null 12 ab cd 34

因为被强转为shor型,所以读取两个字节,就是cd34。

*pshort = 100;
cout <<n << endl;//12ab0064

内存图

0x8 0x7 0x6 0x5 0x4 0x3 0x2 ox1
null null null null 12 ab 00 64

因为指针改变指向,所以最后两个字节的值改变,变为100,在内存中 存储使用十六进制,100转换为64,占据一个字节,前一个字节补零。输出为12ab0064

char *pchar = (char*)&n;
cout <<hex<< (int)*pchar << endl;

内存图

0x8 0x7 0x6 0x5 0x4 0x3 0x2 ox1
null null null null 00 00 00 64
*pshort = 100;
cout << n << endl;

因为转换为int型,int型占四个字节,所以高位补0,结果为00000064,为64。

0x8 0x7 0x6 0x5 0x4 0x3 0x2 ox1
null null null null 12 ab 34 cd
null null null null 12 ab 34 11001101
null null null null 11111111 11111111 11111111 11001101

因为字节数低类型转换为高类型,所以高位补符号位结果为FFFFFFcd

cout << dec << (int)*pchar << endl;
<
0x8 0x7 0x6 0x5 0x4 0x3 0x2 ox1
null 12 ab 34
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值