C语言常见的错误(形参的改变与实参,输出时%d的各种情况)

2023-12-19 20:57:26

所有语言:C语言

任务点:(1)形参的改变与实参

? ? ? ? ? ? (2)输出时%d的各种情况

? (一):形参的改变与实参

错误情况:

#include<stdio.h>
void swap(int x, int y)
{
	int z = x;
	x = y;
	y = z;
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	printf("变化前a=%d,b=%d\n", a, b);
	swap(a, b);
	printf("变化后a=%d,b=%d\n", a, b);

	return 0;
}

输入a=10 b=20,结果如下:

可以看到a和b的值并没有发生变化,这是因为在函数中x和y有自己的储存空间,当实参传递给形参的时候,形参是实参的一份临时拷贝,对形参的改变不影响实参,因为x和y并没有获取到a和b的地址,等于现在有4个地址,a和b的地址 与 x和y的地址是两个独立的地址对,x和y只是进行了简单的赋值而并没有将a和b进行存储。

正确写法:

#include<stdio.h>
void swap(int* px, int* py)
{
	int z = *px;
	*px = *py;
	*py = z;
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	printf("变化前a=%d,b=%d\n", a, b);
	swap(&a, &b);
	printf("变化后a=%d,b=%d\n", a, b);

	return 0;
}

此处用指针将x,y,a,b的地址联系起来,这样就只有两个地址进行运输,从而达到实现目的。

(二)输出时%d的各种情况:

(1):%.xf小数点所取位数?

例子:"%.x f "? ?x表示小数点后的位数

#include <stdio.h>
int main() {
	float a = 0.0f;
	scanf("%f", &a);
	printf("%.2f\n", a);
	return 0;
}

?注意:float保留小数后位数时会四舍五入

(2):%xd在输入语句中的使用

例子:x表示输入域宽,超出m位只读m位,不足m位按实际位数读取

#include <stdio.h>
int main() {
	int  a = 0;
	scanf("%6d", &a);
	printf("%d\n", a);
	return 0;
}

(3):%xd在输出语句中的使用

例子:x表示输出域宽,超出m位只读m位,不足时,忽略m,原样输出

#include <stdio.h>
int main() {
	int  a = 4331;
	printf("%3d\n", a);
	printf("%4d\n", a);
	printf("%5d\n", a);
	printf("%6d\n", a);
	printf("%7d\n", a);

	return 0;
}

(4):%0xd在输出语句中的使用

例子:x表示输出域宽,超出m位只读m位,不足时,忽略m,原样输出,输出数值时指定左面不使用的空位置自动填0。

#include <stdio.h>
int main() {
	int  a = 4331;
	printf("%03d\n", a);
	printf("%04d\n", a);
	printf("%05d\n", a);
	printf("%06d\n", a);
	printf("%07d\n", a);

	return 0;
}

结束语:一些常见的c语言错误分享给大家,我是一名小白,写这些是为了记录我的c语言学习,顺便就当复习知识点了,文章有的部分是按照我个人的理解写的,可能会有错误,但是问题应该不大,我都试过了,欢迎大家为我指出错误。祝大家明天都活的开心,拒绝emo,积极向上,加油!

文章来源:https://blog.csdn.net/2201_75713054/article/details/132764920
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。