翁恺老师C语言学习笔记(十)指针_指针的使用

本文介绍了C语言中指针的两种应用场景,包括交换变量值和通过指针返回函数结果,同时提到了指针错误的典型例子——未初始化的指针使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指针的应用场景一
· 交换两个变量的值

void swap(int *pa, int *pb);//定义指针*pa和*pb 

int main(void)
{
	int a = 5; 
	int b = 6;
	swap(&a, &b); // swap取得a和b的地址 
	printf("a=%d,b=%d\n",a,b);
	return 0;
}
void swap(int *pa, int *pb)
{
	// swap函数对*pa 和*pb进行交换 
	int t= *pa; 
	*pa = *pb;
	*pb = t;
} 

运行结果

a=6,b=5

在这里我们通过swap函数对a的值和b的值进行了交换

指针应用场景二
· 函数返回多个值,某些值就只能通过指针返回
· 传入的参数实际上时需要保存待会结果的变量

/**
取出一组数组里的最小的和最大的值 
**/
void minmax(int a[], int len, int *min, int *max); 
int main(void)
{
	int a[] = {1,2,3,4,5,6,7,8,9,12,13,14,16,17,21,23,55,};
	int min,max;
	//main里调用minmax数 
	//通过sizeof(a)/sizeof(a[0]计算元素长度
	//通过&min,&max 取得地址交给minmax函数 
	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]; //最小和最大都为a[]的第一个元素 
	for (i=1;i<len;i++){ // 从第二个元素开始遍历数组 
		if(a[i]<*min){ 
			*min =a[i]; //如果a[i]小于*min,最小数就是a[i] 
		}
		if(a[i]>*max){
			*max =a[i]; //如果a[i]大于*max,最小数就是a[i]
		}
	}
}

输出结果

min=1,max=55

指针应用场景二b
· 函数返回运算的状态,结果通过指针返回
· 常用的方法时让函数返回特殊的不属于有效范围内的值来表示出错:
· -1和0(表示操作是否成功)
· 当任何数值都时有效的可能结果时,需要分开返回
· 在C语言是不通过的,在后续语言(C++,Java)采用了异常祭之解决了这个问题

/** 
return 如果除法成功,返回1;否则返回0 
**/
int divide(int a, int b,int *result);

int main(void)
{
	int a=5;
	int b=2;
	int c;
	// 如果a/b为0,c的结果为0不没有任何有意义的结果 
	if(divide(a,b,&c)){
		printf("%d/%d=%d\n", a, b, c);
	}	
	return 0;
}

int divide(int a, int b, int *result)
{
	// 如果结果是0,不做运算,如果结果不是零,返回结果 
	int ret = 1;
	if(b == 0)ret = 0;
	else{
		*result = a/b;
	}
	return ret;
 } 

指针最常见的错误
· 定义了指针变量,还没有指向任何变量,就开始使用指针
· 任何变量没有得到实际变量地址之前,不能通过*p取访问任何数据

### 关于浙江大学翁恺老师的C语言学习资源 针对C语言的学习,浙江大学的翁恺老师提供了丰富的教学材料和视频教程。这些资源不仅涵盖了基础概念,还包括实践应用和技术细节。 #### C语言的历史和发展背景 C语言起源于1967年,当时Martin Richards对CPL语言进行了简化并创造了BCPL语言[^1]。随后,在1970年,Ken Thompson基于BCPL开发了更贴近硬件的B语言,并用于编写首个UNIX操作系统。紧接着,Dennis M. Ritchie在1972年进一步改进B语言,从而诞生了经典的C语言。这一过程体现了编程语言如何逐步演进以适应不同的计算需求。 #### 翁恺老师的在线课程与教材推荐 对于希望跟随翁恺教授深入理解C语言的学生来说,有以下几个途径可以获得高质量的学习资料: - **中国大学MOOC平台上的《程序设计入门—C语言》**:这门课由翁恺亲自讲授,适合初学者以及有一定经验的人士复习巩固知识点。 - **书籍**:虽然具体的书名可能因版本不同而有所变化,但通常会围绕着标准C语法展开讨论,如`ANSI C` (1989),它后来被国际标准化组织采纳成为ISO C标准(C89)。后续还有多次修订,比如C95, C99等版本更新。 #### 实践技巧分享 当涉及到具体编码操作时,了解一些实用的小贴士可以帮助提高效率。例如,在处理数组长度计算方面,可以通过如下方法获取数组元素数量: ```c int a[] = {1, 2, 3}; size_t n_elements = sizeof(a)/sizeof(*a); ``` 这里利用了`sizeof()`运算符来测量整个数组及其单个成员所占字节数的比例,进而得出总数目[^2]。 #### 推荐参考资料链接 为了方便查找更多关于翁恺老师的公开讲座和其他辅助文档,请访问以下网站或搜索引擎查询关键词:“浙江大学 翁恺 C语言”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值