8.23( ?)

今日学习内容:

笔记:

1.指针的使用
  • 交换两个变量的值
#include <stdio.h>
void swap(int* pa, int* pb);

int main(void)
{
	int a = 5;
	int b = 6;
	swap(&a, &b);
	printf("a=%d,b=%d\n", a, b);

		return 0;

}
void swap(int* pa, int* pb)
{
	int t = *pa;
	*pa = *pb;
	*pb = t;
}
  • 函数返回多个值,某些值只能通过指针返回程序
  • 传入的参数实际上需要保存带回结果的变量

#include <stdio.h>
void minmax(int a[], int len, int* max, int* min);
int main()
{
	int a[] = { 1,2,3,4,5,6,7,8,9,12,13,14,16,17,21,23,55 };
	int min, max;
	minmax(a, sizeof(a) / sizeof(a[0]), &min, &max);
	printf("min=%d,max=%d.\n", min, max);

	return 0;
}
void minmax(int a[], int len, int* min, int* max)                                           //作用是把结果带出来
{
	int i;
	*min = *max = a[0];
	for (i = 1; i < len; i++)
	{
		if (a[i] < *min)
		{
			*min = a[i];

		}
		if (a[i] > *max)
		{
			*max = a[i];

		}
	}
}
len是长度,其=sizeof(a)/sizeof(a[0]),a数组的全部字节长度除以a数组每个单元的字节长度,就是a数组的长度了。
return只能返回一个值,你可以理解为一个有返回值的函数只能表示一个值。为了返回多个,比如两个值,我们就要用指针这个变态,进去假装变量,然后窃取函数的劳动成果
  • 函数返回的状态,结果通过指针返回
  • 常用的套路:让函数返回的特殊的不属于有效范围的值来表示出错:用-1/0返回表示没成功(但当任何数值都是有效的可能结果时,就要分开返回) 则此时状态用函数的return来返回 而实际值通过指针参数返回。

#include <stdio.h>
int divide(int a, int b, int* result);

int main(void)
{
	int a = 5;
	int b = 2;
	int c;
	if (divide(a, b, &c))
	{
		printf("%d/%d=%d.\n", a, b, c);

	}
	return 0;
}

int divide(int a, int b, int* result)
{
	int ret = 1;
	if (b == 0)
	{
		ret = 0;
	}
	else
	{
		*result = a / b;

	}
	return ret;
}

//运算可能会出错,所以要通过另外途径表达出来

最常见错误:定义了指针变量,还没让它指向任何变量就开始使用(没有和任何变量联系在一起,没被赋予一个实际的值)
是在声明指针变量的时候就要对指针变量赋值,如果只声明不赋值,指针变量将会是一个未定义的值(可以理解为垃圾值)。

2.指针与数组:

传入函数的变量:普通变量→参数接收到的是值;传指针→接收到的也是值(是地址)
数组作为值传给函数
函数参数表中的数组实际上是指针【sizeof(a)==sizeof(int*)】 但可用数组的运算符[ ]计算

  • 数组参数
    在这里插入图片描述

数组变量:特殊指针 本身表达地址(不用加&) 【但数组单元表达的是变量,要用&】
a==&a[0]
[]可对数组做也可对指针做【p[0] <= => a[0]】 p是int *类型的指针用于存放地址。p = &min *p取的是地址里面的值
*运算符可以对指针做也可以对数组做【a = 25】
数组变量是const的指针,so不能被赋值 inta[] <==> int
const a =…

3.指针与const

const在*左边不是表示数值不能改变,而是表示不能通过指针改变数值,直接赋值是可以改变的。
常量指针:常量不可以变,指针指向可以变(如不能通过指针p去修改变量i )

承认错误,,,还是看不下去,为啥,一看到指针就有种莫名的烦感🤦‍打算明后两天干完所有内容。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值