初步认识c语言:简单描述指针(重点)

目录

目前不讲指针的复杂用法

一.指针的作用

二.地址的概念和数据存放的原理

a地址的编号

 为什么地址的样子类似于0x00EFF858这样

指针的表达

三.指针的变量大小


目前不讲指针的复杂用法

一.指针的作用

可返回多个或不同类型的值,弥补数组与函数的缺陷。

在程序设计过程中,无论是存入数据还是取出数据都需要与内存单元打交道,计算机通过地址编码来表示内存单元。指针类型就是存放地址编码,处理计算机的地址数据的。

指针除了能够提高程序的效率,更重要的作用是能使一个函数访问另一个函数的局部变量,因此指针是两个函数进行数据交换必不可少的工具。

二.地址的概念和数据存放的原理

首先

需要我们知道计算机中内存会划分为一个个内存单元地址

 

在我们写程序的时候

int main()
{    
int a = 10;

    return 0;
}

其中变量a会向内存申请4个byte大小的空间去存放a(也就是4个内存单元格)


a地址的编号

#include<stdio.h>
int main()
{    
int a = 10;
printf("%p\n",&a);//将其a的地址打印出来0x00eff858
    return 0;
}

 为什么地址的样子类似于0x00EFF858这样

例如int a=10;a向内存申请4个byte

0000 0000 0000 0000 0000 0000 0000 1010

转化为16进制就是0x0000000a


指针的表达

 #include<stdio.h>
int main()
{    
char ah = 10;
char*ah = &ah;//char 说明ah指向的对象是char类型  *说明p是指针变量
    return 0;
}

 

*p解引用操作符

#include<stdio.h>

int main()
{    
char ah = 10;

char*p = &ah;//char 说明ah指向的对象是char类型  *说明p是指针变量

*p=20//解引用操作符,意思是通过p存放的地址,找到p所指代的对象。所以*p就是p指代的对象。
printf("%d\n",a);
//最后打印出的数字为20
    return 0;
}

三.指针的变量大小

可用操作符sizeof来计算(单位为byte)

 #include<stdio.h>

int main()
{    
     printf("%d\n",sizeof(char*));   
     printf("%d\n",sizeof(int*));//
     printf("%d\n",sizeof(float*));
     printf("%d\n",sizeof(double*));
     printf("%d\n",sizeof(short*));

    return 0;
}

在C/C++中,指针变量的大小是固定的,它的大小与操作系统和编译器有关。具体来说,指针变量的大小通常为4字节或8字节,取决于操作系统和编译器的位数。

在32位的操作系统上,指针变量的大小通常为4字节;在64位的操作系统上,指针变量的大小通常为8字节。

这是因为32位操作系统的地址总线宽度为32位,最多可以寻址2 ^ 32(4 个 8bit 即 4B)个内存单元,因此一个指针变量需要4字节来存储地址。而64位操作系统的地址总线宽度为64位,最多可以寻址2 ^ 64(8 个 8bit 即 8B)个内存单元,因此一个指针变量需要8字节来存储地址。

需要注意的是,指针变量的大小只与地址空间有关,而与指向的对象类型无关。无论指针变量指向何种类型的对象,它的大小都是固定的。

参考 32,64最大支持的内存寻址空间
 

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小牛总

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值