菜鸡日记_C语言学习之指针

前言

​ 本菜鸡开始了学习C语言的旅途。用这个来记录一下上课所学到的一些东西。仅作为自己的一个学习笔记。里面的内容也只是我对学到的东西的一些理解,可能有很多错误,大佬们勿喷。如果发现我理解的有哪些错误,欢迎评论区指出,希望大佬们不吝赐教。



指针

1. 什么是指针

地址: 系统为了方便给每一个字节区分,对他们进行逐一编号,成为地址。

指针概念: 专门用来存放变量地址的变量,或称为指针变量。




2.定义指针

指向类型 *指针变量名 {=初始值};

示例:

int a=5;

int *p=&a; //如果定义的a是其他类型, 前面就修改成其他类型。比如a是char型就是char *p=&a;

就是先分配一块内存叫做p,然后把a的地址存在里面。

在这里插入图片描述

就像上面的图,定义了一个a,系统就会分配一块地址给a,然后这块空间的内容就是5,再定义一个指针,这个指针指针指向a,也就是系统分配了一块地址给p,然后这块空间的内容就是a的地址。



3. 两个与指针相关的操作符

&(取地址符):单目运算符

​ &对象名

​ 取某个对象(变量、数组、函数…)的地址

​ 示例:

​ int x;

​ scanf("%d", &x);

*(指向运算符) :单目运算符

​ *地址 就等于 取出地址对应的那个变量

int a=5;
int *p=&a;
 printf("%d\n",*p);  //p里面的内容是a的地址。*p就是取出a的地址对应的值,也就是5。
*p=10;               //这里将a的地址对应的空间里面的值改成了10,也就是将a改成了10.

指针的尺寸:

指针的大小是指指针变量所占的内存空间的大小 。

指针的尺寸由系统的位数来决定,而并非他所指向的类型。(我的理解就是不管这个指针指向的数据是什么类型,指针里面存放的都是地址,所以指针的尺寸就是一个地址的大小。64位系统地址是8字节,那么指针的尺寸就是8字节)。



4. 野指针与空指针

概念: 指向一片未知区域的指针,称为野指针。

危害:

  1. 引用野指针,就相当于访问一个非法内存,一般会出现段错误(Segmentation fault (core dumped))

  2. 引用野指针的时候有可能会意外访问到系统的关键数据,导致系统崩溃,后果很严重。

如何产生:

  1. 定义是没有进行初始化。

  2. 所指向的内存已经被系统回收。

  3. 指针越界。

如何防止:

  1. 定义时及时初始化 / 让他指向空

int *  p  = NULL ; //初始化 p 指向空 NULL 

  1. 已经被系统回收的指针绝不使用/ 在回收后及时让他指向空 null

  2. 确认指针的访问范围,不要越界访问。



空指针其实就是0地址,NULL 也是一个指向0地址的一个a指针。

如:

int *p = NULL;		//p就是一个空指针

空指针也不能引用,不能修改里面的值。会出现段错误。





​ 小练习:利用指针实现在被调函数中交换主调函数的变量的值

#include<stdio.h>
void swap(int *p1,int *p2)
{
	int t=*p1;             
	*p1=*p2;
	*p2=t;
}
int main()
{
	int a=10,b=20;
	swap(&a,&b);
	printf("%d %d ",a,b);
	return 0;
}



5.指针运算

指针的 加法/减法

加法: 加一意味着指针所指向的内存地址加一个单位(数据类型)

减法: 减一意味着指针所指向的内存地址减一个单位(数据类型 )

注意:

如果是整型就加4字节 , 如果是char 则加减1字节 。。。。

int   a = 100 ;
int * p = &a ;   // 定义一个指针P 并让他指向a的地址

int p1 = p + 1 ;
int p2 = p -1 ;

注意:

如果是整型就加4字节 , 如果是char 则加减1字节 。。。。

int   a = 100 ;
int * p = &a ;   // 定义一个指针P 并让他指向a的地址

int * p1 = p + 1 ;
int * p2 = p -1 ;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值