深入了解指针(1)

文章目录

  1. 了解内存和地址
  2. 指针变量和地址
  3. 指针的大小
    4.指针变量类型的意义

1.了解内存和地址
内存划分为⼀个个的内存单元,每个内存单元的⼤⼩取1个字节。
⼀个字节空间⾥⾯能放8个⽐特位,一个比特位可以储存2进制的位1或者0。
1Byte = 8bit
1KB = 1024Byte
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB
每个内存单元也都有⼀个编号,在计算机中我们把内存单元的编号也称为地址。C语⾔中给地址起了新的名字叫:指针。
内存单元的编号=地址=指针
2.指针变量和地址
2.1取地址操作符(&)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{  //利用&获取a的地址
	int a = 20;
	printf("%p", &a);
	return 0;
}

在这里插入图片描述
在这里插入图片描述
在不同的环境下地址也会不同。
2.2指针变量和解引⽤操作符(*)
通过取地址操作符(&)拿到的地址是⼀个数值,⽐如:00FAFC00,这个数值有时候也是需要存储起来,⽅便后期再使⽤的,那我们把这样的地址值存放在哪⾥呢?答案是:指针变量中。

#include <stdio.h>
int main()
{
 int a = 20;
 int * pa = &a;//取出a的地址并存储到指针变量pa中
 
 return 0;

解引⽤操作符(*)。

#include<stdio.h>
int main()
{  //利用&获取a的地址
	int a = 20;
	int* p = &a;
	printf("%d\n", *p);
	*p = 10;
	printf("%d", *p);
	return 0;
}

在这里插入图片描述
p是p中存放的地址,改变p相当于改变a的变量。

  1. 指针的大小
    32位平台下地址是32个bit位(即4个字节)
    64位平台下地址是64个bit位(即8个字节)
int main()
{
	printf("%zd\n", sizeof(int*));
	printf("%zd\n", sizeof(char*));
	printf("%zd\n", sizeof(float*));
	printf("%zd\n", sizeof(double*));
	printf("%zd\n", sizeof(short*));
	return 0;
}

X86环境输出结果:
在这里插入图片描述
X64环境输出结果:
在这里插入图片描述
4.指针变量类型的意义
其实指针类型是有特殊意义的,指针的类型决定了,对指针解引⽤的时候有多⼤的权限(⼀次能操作⼏个字节)。
⽐如: char* 的指针解引⽤就只能访问⼀个字节,⽽ int* 的指针的解引⽤就能访问四个字节。

int main()
{
	int a = 20;
	int* pi = &a;
	char* pc = (char *)&a;
	printf("%p\n", &a);
	printf("%p\n", pc);
	printf("%p\n", pc+1);
	printf("%p\n", pi);
	printf("%p\n", pi+1);
}

在这里插入图片描述
后续将持续更新“深入了解指针”系列(⑅•͈ᴗ•͈).:*♡

  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值