指针与结构体的基础介绍——附带一个喝汽水小游戏

指针

  • 指针是什么

指针就是地址,通过它可以找到地址的内存单元。
其在32位电脑里大小是4个字节,在64位电脑里是8个字节。
指针和指针类型
变量有不同的类型,有整形,浮点型,字符型,而作为指向地址指针,也是有的。

指针加减整数的意义是什么?

指针加减整数的意义是向其前或者后面走一个地址的大小。
而这个地址的大小就是由指针类型决定。

  • 野指针

成因:

指针未初始化
指针越界访问
指针指向的空间释放
如何规避野指针?
指针初始化

避免越界:

指针指向空间放置NULL
指针在使用前检查其有效性

如:

int main()
{
	int *p = NULL;
	int a = 10;
	p = &a;
	if (p != NULL)
		*p = 20;
	return 0;
}

小知识:

同一连续的地址让指针分别指向前一个地址和后面的地址,俩个指针相减的差值为俩个地址的距离。
指针和数组结合
指针数组:

char* p[10];

对比与“好孩子”,所以其还是数组,只是数组里面放的是10个指针。

  • 数组指针:
char(*p)[10];

表示的是一个数组,其申请了10个地址。

  • 二级指针
int a = 10;
int *pa = &a;
int **ppa = &pa;//二级指针
int ***pppa = &ppa;//三级指针

- 结构体

结构体的声明:

struct tag
{
	member-1ist
}variable-1ist;

member成员变量可以是标量,变量,数组,指针,结构体。
variable为其非成员变量。

  • 初始化:
variable - 1ist = { 0 };
  • 访问:

点引用。

若为*variable - 1ist 使用->引用。

注意:

在使用函数传结构体时,尽量利用指针,因为函数传参需要压栈,如果结构体过大,参数的系统开销较大,会导致性能下降。

- [ ] 喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水(编程实现)。

#define _CRT_SECURE_NO_WARINGS 1
#include<stdio.h>
int main()
{
	int sum = 0;
	int m = 0;
flag1:
	printf(" 喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,输入你有多少钱。\n");
		scanf_s("%d", &m);
		sum = m;
		while (m>1)
		{
			if (m % 2 == 0)
			{
				m = m / 2;
				sum += m;
			}
			else
			{
				m = m / 2;
				sum += m;
				m = m + 1;
			}
		}
		printf("你可以喝到%d瓶汽水\n\n\n", sum);
		printf("再来小可爱\n");
			goto flag1;
	return 0;
}
发布了9 篇原创文章 · 获赞 16 · 访问量 2301

猜你喜欢

转载自blog.csdn.net/Shangxingya/article/details/104186518