总结——指针(1)

博客IDLanFuRen
C系列专栏C语言重点部分  C语言注意点  C++基础  Linux  数据结构  C++注意点
声明等级:黑色->蓝色->红色
欢迎新粉加入,会一直努力提供更优质的编程博客,希望大家三连支持一下啦

目录

1.指针的引入

2.指针变量相关内容

1)指针变量的概念

2)取地址操作符

int a=1; 

int*p=&a;这里是把a的地址赋给了指针变量p,或者更明确一点是p是指向a的指针变量。

3)解引用操作符

int a=1;

int*p=&a;

printf("%d",*p);//输出的值就是a的值。

3.指针变量的大小

4.void*指针

指针,可谓是C语言中重中之重的难点,所以我们会分几次来详解指针的所有的知识点。

1.指针的引入

我们住的宿舍都是有编码地址的,这样我们好找到我们的房间,例如602宿舍,我们就很容易通过602去找到该宿舍去串门哈哈哈。我们内存中所存储的数据,自然也就会有地址啦。那地址==编号==指针,指针就是这个意思。看张图更清晰。

2.指针变量相关内容

1)指针变量的概念

int*p就是一个指针变量,*代表p变量是指针变量,int代表指针变量的类型是整型。指针变量存储的是地址。

2)取地址操作符

在scanf函数中,我们就遇到过这个操作符&,意思是取出该变量的地址。

int a=1; 

int*p=&a;这里是把a的地址赋给了指针变量p,或者更明确一点是p是指向a的指针变量。

3)解引用操作符

既然我们把a的地址取出来给了指针变量p,那么就可以通过指针变量经过操作访问a的空间,那就是解引用操作符*,这个*可不是int*p中的*,而是专门的解引用操作符,用来解析地址获得指向的空间内容。

int a=1;

int*p=&a;

printf("%d",*p);//输出的值就是a的值。

3.指针变量的大小

其实很多人会误解指针变量大小跟类型有关,其实不然。不管是int*,还是char*等其他类型,在32位环境下都是4字节,64位是8字节。我们可以用sizeof来看看运行结果是否与结论一致。

int main()
{
	printf("%zd\n", sizeof(int*));
	printf("%zd", sizeof(char*));
	return 0;
}

既然如此,那给这样的不同类型有什么区别呢,一是保持与需要接受的变量的类型是一样的,一方面是,int*类型的指针变量一次性可以访问4字节,而cahr*只能一次性访问1字节。 

代码1代码2
#include <stdio.h>
int main()
{
    int n = 0x11223344;


    int *pi = &n;




    *pi = 0;




    return 0;
}
#include <stdio.h>
int main()
{
    int n = 0x11223344;
    char *pc = (char *)&n;
    *pc = 0;
    return 0;
}

通过这两个代码查看内存就知道这个知识了。

左图1,右图2代码

正因为指针变量有如此操作,我们可以通过指针变量(指针)+-整数来前进或倒退来访问下一个地址。

结论:指针的类型决定了指针向前或者向后⾛⼀步有多⼤(距离)

4.void*指针

在指针类型中有⼀种特殊的类型是 void* 类型的,可以理解为⽆具体类型的指针(或者叫泛型指针),这种类型的指针可以⽤来接受任意类型地址。但是也有局限性, void* 类型的指针不能直接进行指针的+-整数和解引用的运算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值