【C语言】指针基础知识(二)

本文详细介绍了指针的类型含义,包括不同类型的指针所操作的字节数,如char*、int*和short*的区别。此外,讨论了void*指针的特殊性,const修饰指针的作用,以及指针的基本运算,如指针加减整数、指针与指针的差以及关系运算的应用。
摘要由CSDN通过智能技术生成

一,指针变量类型的意义

1,指针的类型决定了,对指针解引⽤的时候有多⼤的权限(⼀次能操作⼏个字节)。

例如:char* 的指针解引⽤访问⼀个字节,int* 的指针解引⽤访问四个字节,short*的指针解引⽤访问两个字节。

二,指针+-整数

指针的类型决定了指针向前或者向后⾛⼀步有多大距离。

三,void* 指针

在指针类型中有⼀种特殊的类型是 void* 类型的,可以理解为无具体类型的指针(或者叫泛型指 针),这种类型的指针可以用来接受任意类型地址。

局限性:1,void* 类型的指针不能直接进行指针的+-整数。

              2,解引用的运算。

四,const修饰指针

例:

#include <stdio.h>
int main()
{
 int m = 0;
 m = 20;//m是可以修改的
 const int n = 0;
 n = 20;//n是不能被修改的
 return 0;
}

但是如果我们绕过n,使⽤n的地址,去修改n就能做到了。

3732d5ff393542558f9ce4b7880d19c8.png

注:

const修饰指针变量时:
• const如果放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。但是指针变量本⾝的内容可变。
• const如果放在*的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指向的内容,可以通过指针改变。
 

89d6f5b5aaa94cc6a0ccaa82556cdc43.png

五,指针运算

指针的基本运算有三种,分别是:
1,指针+- 整数
2,指针-指针
3,指针的关系运算

1,指针+- 整数

#include <stdio.h>
//指针+- 整数
int main()
{
 int arr[10] = {1,2,3,4,5,6,7,8,9,10};
 int *p = &arr[0];
 int i = 0;
 int sz = sizeof(arr)/sizeof(arr[0]);
 for(i=0; i<sz; i++)
 {
 printf("%d ", *(p+i));//p+i 这⾥就是指针+整数
 }
 return 0;
}

运行结果:

66ba7f9a8c2148f094be88ffb110ffd4.png

cceb8c94c392432785908e27911423ff.png

 

2,指针+-指针

//指针-指针
#include <stdio.h>
int my_strlen(char* s)
{
	char* p = s;
	while (*p != '\0')
		p++;
	return p - s;
}
int main()
{
	printf("%d\n", my_strlen("abc"));
	return 0;
}

运行结果:3

指针减指针得到的是指针之间的元素个数

3,指针之间的关系运算

#include <stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int* p = &arr[0];
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	while (p < arr + sz) //指针的⼤⼩⽐较
	{
		printf("%d ", *p);
		p++;
	}
	return 0;
}

运行结果:

09581f5638464ae3aa190b15a07ee467.png

指针之间的关系运算本质是比较大小

ae24edbca9e54075972344f20bcf4f20.png

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旅行的九月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值