初识C语言—指针


非常重要!!!

内存,是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的

为了有效地使用内存,就把内存分成一个个小的单元,每个单元的大小就是1字节

为了能够有效的访问到内存的每个单元,就给内存进行了编号,这些编号被称为该内存单元的地址

内存属于空间,和现实生活中空间的使用非常相似,都取的有名字

两个问题

  • 内存是怎么编号的

  • 一个内存单元是多大空间

32位计算机 - 有32根地址线 - 物理线 - 通电 - 1/0

我们把电信号转化成数字信息,就变成0和1的二进制序列

00000000000000000000000000000000

...

01111111111111111111111111111111

10000000000000000000000000000000

...

11111111111111111111111111111111

有2^32种情况

这就是内存编号

内存编号就是内存单元的地址


一个内存单元给多大空间呢?

一共有2的32次方个内存单元

如果假设一个内存单元是1bit

就可以管理2的32次方bit的空间大小

可以管理4,294,967,296bit

= 536,870,912 Byte

= 524,288MB

= 0.5GB

太小了朋友,如果不直观的话,那么朋友,你想想在C语言中,一个char类型就要1Byte,就是八个bit,要给八个地址,是不是太浪费了?

最终,一个内存单元是一个字节(八个比特)


//指针
int main()
{
    int a = 10;//a在内存中要分配空间的 - 4字节
    //只会拿出第一个字节的地址
    printf("%p", &a);//%p专门用来打印地址
    int * pa = &a;//pa是用来存放地址的,在C语言中叫指针变量
    //*说明 pa是指针变量
    //int说明pa执行的对象是int类型的
​
    char ch = "w";
    char * pc = &ch;
    return 0;
}

指针变量可以存放自身的地址吗?

int main()
{
    int* pa = &pa;
    return 0;
}

可以放但是很奇怪,而且有警告,*和**类型不同,只是把数值放进去了

指针变量

int main()
{
    int a = 10;
    int* pa = &a;
    *pa = 20;//*解引用操作,*pa就是通过pa里面的地址找到a
    printf("%d", a);
    return 0;
}

解引用操作符 *

指针变量有多大?

int main()
{
    printf("%d\n", sizeof(char*));
    printf("%d\n", sizeof(short*));
    printf("%d\n", sizeof(int*));
    printf("%d\n", sizeof(long*));
    printf("%d\n", sizeof(long long*));
    printf("%d\n", sizeof(float*));
    printf("%d\n", sizeof(double*));
​
    return 0;
}

直接看结果

8
8
8
8
8
8
8

指针的大小是相同的

指针是用来存放地址的

指针有多大区别于地址有多大

地址的存储需要多大空间

64个bit位 需要8个字节


暂时关于指针就点到为止,未来再详细写这方面的知识!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

J.Pei

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

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

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

打赏作者

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

抵扣说明:

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

余额充值