深入了解指针(2)

1. const 修饰指针2. 指针运算3. 野指针4. assert断⾔5. 指针的使⽤和传址调⽤

  1. const修饰指针
    1.1使用const修饰变量
    x的本质还是变量,因为有const修饰,编译器在语法上不允许修改这个变量。
    在这里插入图片描述
    1.2当const修饰指针
    const 放在*的左边:const int * p / int const * p;
    / 意思:表示指针指向的内容,不能通过指针来改变了。但是指针变量本身的值是可以改的。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	 int  n = 0;
	printf("n = %d\n", n);
	//const int * p = &n; int const *p=&n;
	/*p = 20;n=20;
	printf("n = %d\n", n);
	return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
const 放在*的右边:int * const p;
意思:表示指针变量p本身不可以修改了,但是指针指向的内容是可以通过指针变量来改变的。

 #include<stdio.h>
int main()
{
	 int  n = 0;
	printf("n = %d\n", n);
	 int * const p = &n;
	// int num = 20;
	// p = &num;
	//printf("n = %d\n", num);
	 *p = 20;
	 printf("n = %d\n", n);
	return 0;
}

在这里插入图片描述
在这里插入图片描述
当*左右都有const
const int * const p;
意思:指针变量p不能被修改,指针变量p指向的内容也不能被修改。

  1. 指针运算
    指针的基本运算有三种,分别是:
    • 指针±整数
    • 指针-指针
    • 指针的关系运算

2.1指针±整数

指针+整数
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int* p = &arr[0];//*p获取arr数组的首地址
	int s = sizeof(arr) / sizeof(arr[0]);
	for (int i = 0; i < s; i++)
	{
		printf("%d ", *p+i);
	}
	return 0;
}

在这里插入图片描述
指针-整数

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int s = sizeof(arr) / sizeof(arr[0]);
	int* p = &arr[s - 1];
	for (int i = 0; i <s; i++)
	{
		printf("%d ", *p-i );
	}
	return 0;
}

在这里插入图片描述

2.2指针-指针
指针之间的运算的前提是两个指针指向同一块空间
不能相加只能相减

指针-指针本质是地址-地址获取的绝对值是指针和指针之间的元素个数。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.3指针的关系运算

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int* p = arr;//*p获取arr数组的首地址
	int s = sizeof(arr) / sizeof(arr[0]);
	while (p < &arr[s])
	{
		printf("%d ", *p);
		p++;
	}
	return 0;
}

在这里插入图片描述
3. 野指针
3.1. 指针未初始化
在这里插入图片描述
3.2指针的越界
在这里插入图片描述
3.3 指针指向的空间释放
在这里插入图片描述

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值