C语言学习过程总结(14)——指针(2)

博主的话

我胡汉三又回来啦!经历了一个多月的期末考试准备,博主终于是放假了,又可以开始C语言的学习总结了。这个寒假博主的打算是C语言的基础部分全面完结,深入知识和数据结构会同步进行,也会分享博主在备战蓝桥杯的过程,感谢大家支持!

 一、const修饰指针

我们知道,变量是可以修改的,对于被指针修饰的变量,我们同样可以通过指针变量去修改这个变量。实际情况中不乏有需要对变量做一些限制,使其不被修改的情况,这时候就要加上const。

#include<stdio.h>
int main() {
	int m = 0;
	m = 20;
	const int n = 0;
	n = 20;

}

上诉代码中,n就是无法修改的值,当尝试去直接修改n的时候,就会报错。

注意是直接去修改,如果间接去修改呢?

可以用到指针

下述代码在vs2022中的会报错的,其修复了这样的一个逻辑问题。

int main() {
	const int n = 0;
	printf("n = %d\n", n);
	int* p = &n;
	*p = 20;
	printf("n = %d\n", n);

}

这样就绕过了n,通过n的地址去改变,相当于给你关了门,从窗户里进去了。那这样对于n中的数据也没有限制好,那要怎么限制呢?

1.const限制指针变量

const可以限制变量,指针变量也是变量,那const是不是也可以限制指针变量呢?答案是肯定的!

int const *p;

int* const p;

分为以上两者情况

int const *p;

限制 *p,限制的是指针指向的内容,保证其内容不被修改,但是指针变量的内容可以更改;

int* const p;

限制 p,p这个指针变量不能被改变,该指针就不能再指向其他变量,但是*p没有被限制,也就是说指向的内容依然可以被改变。

左边定值,右边定向 

 二、指针运算

分为三种:

*指针 +- 整数

*指针 - 指针

*指针的关系运算

 1.指针 +- 整数

以数组为例

数组2345678910
下标0123456789

int *p = &arr[0];//与int *p = arr相同

指针p指向arr数组的首元素,即 1 。p + 1 就意味着指针向后移一位,即 2 。

int *p = &arr;

这时的指针p就是指向数组的地址,这时候 p + 1则意味着指针向后移动整个数组。

2.指针 - 指针

前提是两指针指向同一片空间才可以这样运算

相当于地址 - 地址,结果的绝对值就是指针与指针之间元素的个数。

int my_strlen(const char *s) {
	const char *p = s;
	while (*p != '\0') {
		p++;
	}
	return p - s;
}

int main() {
	printf("%d\n", my_strlen("abc"));
	return 0;
}

需注意:常量字符串“abc”的类型是const char*,使用是需要注意类型的一致。

3.指针的关系运算

主要就是运用在指针比较大小上

int main() {
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int* p = arr;
	int sz = 0;
	sz = sizeof(arr) / sizeof(arr[0]);
	while (p < arr + sz) {//通过p和数组长度的比较来打印数组中的每一位元素
		printf("%-2d", *p);
		p++;
	}
	return 0;
}

三、结束语

在家的效率确实不如学校高,总是想着摸鱼玩,但博主会尽快调整的,力求给大家更新更多优质内容,下一节给大家将“野指针”。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值