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

所有语言:C语言

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

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

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

错误情况:

#include
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,结果如下:

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

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

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

正确写法:

#include
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 
int main() {
	float a = 0.0f;
	scanf("%f", &a);
	printf("%.2f\n", a);
	return 0;
}

C语言常见的错误(形参的改变与实参,输出时%d的各种情况)_第3张图片 注意:float保留小数后位数时会四舍五入

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

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

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

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

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

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

#include 
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;
}

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

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

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

#include 
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语言常见的错误(形参的改变与实参,输出时%d的各种情况)_第6张图片

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

你可能感兴趣的:(c语言,开发语言,c#,算法)