0
点赞
收藏
分享

微信扫一扫

10 - 初学指针笔记

幸福的无所谓 2022-03-16 阅读 38

指针

1、 指针的基本概念

指针的作用: 可以通过指针间接访问内存

  • 内存编号是从0开始记录的,一般用十六进制数字表示

  • 可以利用指针变量保存地址

2、指针变量的定义和使用

指针变量定义语法: `数据类型 * 变量名

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>


int main()
{
	int a = 0;
	int b = 0;

	int* p1 = &a;
	int* p2 = &b;

	printf("请输入两个数:");
	scanf("%d%d", &a, &b);
	printf("a:%d  b:%d\n", a, b);

	int n = *p1;
	*p1 = *p2;
	*p2 = n;

	printf("a:%d  b:%d\n", a, b);



	system("pause");
	return 0;
}

指针变量和普通变量的区别

  • 普通变量存放的是数据,指针变量存放的是地址
  • 指针变量可以通过" * "操作符,操作指针变量指向的内存空间,这个过程称为解引用

3、空指针和野指针

空指针:指针变量指向内存中编号为0的空间

**用途:**初始化指针变量

**注意:**空指针指向的内存是不可以访问的

示例1:空指针

int main() {

	//指针变量p指向内存地址编号为0的空间
	int * p = NULL;

	//访问空指针报错 
	//内存编号0 ~255为系统占用内存,不允许用户访问
	printf("%d",*p);

	system("pause");

	return 0;
}

示例2:野指针

int main() {

	//指针变量p指向内存地址编号为0x1100的空间
	int * p = (int *)0x1100;

	//访问野指针报错 
	printf("%d",*p);

	system("pause");

	return 0;
}

4、指针的加减

int 类型的指针 +1,指针跳一个int大小

char 类型的指针 +1,指针跳一个char大小

  • p1 + 1 => 下一个地址 => 地址 + 类型大小
  • p1 - 1 => 前一个地址 => 地址 - 类型大小
  • p2 - p1 => 求两个地址之间有几个类型 => (p2 - p1) / 类型大小
	int a = 10;
	char ch = 'a';
	int* p = &a;
	char* pCh = &ch;
	printf("a的地址:%p\n", p);
	printf("a+1的地址:%p\n\n", p+1);

	printf("ch的地址:%p\n", pCh);
	printf("ch+1的地址:%p\n", pCh+1);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gxn7COzm-1647404045350)(C:\Users\14604\AppData\Roaming\Typora\typora-user-images\image-20220307175526161.png)]

5、指针和数组

**作用:**利用指针访问数组中元素

指针与数组

1.数组名等价 => 数组地址

2.数组名不等价于与指针 => 数组地址不可修改

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
//3.假设有一个数组a,整型,有5个元素,通过键盘输入数组各元素,要输出数组各元素的值。
//要求:采用指针法,如*(a + i)形式输出数组各元素, 其中a为数组名

int main()
{
	int ary[5] = { 0 };
	printf("请输入5个整数:");
	for (int i = 0; i < 5; i++)
	{
		scanf("%d", &ary[i]);
	}
	int* a = ary;

	printf("ary[5]={");
	for (int i = 0; i < 5; i++)
	{
		printf("%d  ", *(a + i));
	}
	printf("}\n");

	system("pause");
	return 0;
}

6、指针和函数

**作用:**利用指针作函数参数,可以修改实参的值

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

//1.编写函数,实现使用指针交换两数
void Swap(int* a, int* b)
{
	int n = *a;
	*a = *b;
	*b = n;


}
int main()
{
	int a = 0;
	int b = 0;

	printf("请输入两个数:");
	scanf("%d%d", &a, &b);
	printf("a:%d  b:%d\n",a,b);

	Swap(&a, &b);
	printf("a:%d  b:%d\n", a, b);



	system("pause");
	return 0;
}
举报

相关推荐

go初学篇(五)之指针

10.指针

mysql初学笔记

初学CSS笔记

分块初学笔记

指针笔记一:认识指针

Swagger初学习笔记

0 条评论