C语言指针

指针的介绍
        所谓指针,想必大家并不陌生。在很多的教材中,都会把指针比作是一个房间号,事实上确实如此。

1.1.内存和地址


        简而言之,就是把一个内存的编号记作了地址。而C语言又给这个地址起了个名字,叫指针。

1.2.编址


        CPU访问内存中的某个字节空间,必须知道这个 字节空间在内存的什么位置,⽽因为内存中字节 很多,所以需要给内存进⾏编址(就如同宿舍很多,需要给宿舍编号⼀样)。

        计算机的编址是有硬件控制的,本质上是一种约定俗成的共识。

        计算机内是有很多的硬件单 元,⽽硬件单元是要互相协同⼯作的。但是硬件之间又是彼此独立的存在,所以要用“线”把他们来连接起来,CPU和内存也是如此。

        我们看一下地址总线。

        一般来说,我们可以简单的理解为32位机器有32个地址总线。每根线有两个状态,有脉冲或者没有,分别用1和0代表。

1.3.&和*
        &操作符是取出一个数据的地址,*是解引用操作。

        比如下边这个代码,用p来接受a的地址。p的类型的int*,也就是int类型的指针。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
 
int main()
{
 
	int a = 10;
	int* p = &a;
	printf("%d,%d\n", a, *p);
	printf("%p,%p\n", &a, p);
	return 0;
}

   根据运行结果可以看出他们的等效。

1.4.简单运用
 

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
 
int main()
{
 
	int a = 10;
	int* p = &a;
	printf("%d,%d\n", a, *p);
	*p = 0;
	printf("%d,%d\n", a, *p);
	return 0;
}


        可以看出,a的值通过*p直接改变了。

1.5.指针变量的大小
        在32位和64位的前提下,指针的大小是不一样的,在x64的条件是8个字节,在x86的条件下,大小是4。

        因为指针的大小和指针的类型没有关系,指针的类型只会影响指针解引用后的步长。所以这里只使用一个int*类型的指针。

1.6.const修饰指针
        直接搬出结论。

1.7.规避野指针
        一般来说,我们说一个指针是一个野指针,并不是说只要没有初始化就是一个野指针。而是指针在使用的时候,要有一个合法的空间,而不是非法的访问内存。

1.8.assert断言
        

        使用assert()函数断言的时候需要一个头文件<assert.h>。如果条件为真,那么断言不起作用,如果为假,会终止程序。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值