所有语言: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,积极向上,加油!