初始指针

指针

什么是指针?

在计算机科学中,指针(pointer)是编程语言中的一个对象,利用地址,它的值直接指向存在电脑储存器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。

指针:

指针是个变量,存放内存单元的地址

在这里插入图片描述

总结:指针就是变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)

指针类型的意义

指针有多种类型,int 型,char 型, float 型,double 型

指针类型决定了,指针再解引用操作的时候,能够访问空间的大小

int *p,*p能够访问 4 个字节。
char * p,*p能够访问 1 个字节。
double *p,*p能够访问 8 个字节。
如果,指针 ±整数,指针的类型就决定了指针向前或向后走的距离(int 类型的指针+1等于 char 类型+4)

野指针
概念:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)

野指针成因:

  1. 指针未初始化
  2. 指针越界访问
  3. 指针指向的空间被释放

如何避免野指针
4. 指针初始化
在这里插入图片描述
如果实在不知道指针该如何赋值,可以赋予NULL 空指针

  1. 小心指针越界
  2. 指针指向空间释放时,及时置NULL
  3. 指针使用前检查有效性

指针运算:
1.指针±整数

例:利用指针访问数组


void main()
{
	int a[5] = { 1, 2, 3, 4, 5 };
	int i = 0;
	int *p = a;
	for (i = 0; i < 5; i++)
	{
		printf("%d ", *p);
		p++;
	}
}

结果如下:

在这里插入图片描述

2.指针-指针
在数组中,指针与指针相减,得到的绝对值为两个指针间元素的个数。
如:

#include<stdio.h>

void main()
{
	int a[5] = { 1, 2, 3, 4, 5 };
	int i = 0;
	int *p1 = &a[0],*p2=&a[4];
		printf("%d\n ", *p2-*p1);
}

结果如下:
在这里插入图片描述
例:利用指针模拟 strlen 函数:


#include<stdio.h>

int my_strlen(char *str)
{
	char * start = str;
	char * end = str;
	while (*end != '\0')
	{
		end++;
	}
	return end - start;
}
void main()
{
	char a[] = "i love you";
	int len = my_strlen(a);
	printf("%d\n", len);
	
}

结果如下:
在这里插入图片描述

3.指针的关系运算

指针与数组

正常情况下,仅有一个 数组名 表示的都是数组首元素的地址。但是有两种情况例外
1.&数组名 – 数组名不是首元素的地址,而是整个数组的地址,&数组名 表示取出整个数组的地址
2.sizeof( 数组名)-- 数组名表示的也是整个数组的地址,sizeof(数组名)表示的是计算整个数组的大小

既然数组名表示首元素的地址,那么通过指针访问数组就成为了可能

#include<stdio.h>
void main()
{
	int arr[5] = { 1, 2, 3, 4, 5 };
	int *p = arr;
	int i;
	for (i = 0; i < 5; i++)

		printf("%d ", arr[i]);
	printf("\n");

	for (i = 0; i < 5; i++)
		printf("%d ", *(p + i));
	printf("\n");
}

结果如下:
在这里插入图片描述

可以看到,利用数组和指针访问的结果相同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值