C语言学习记录
今天学了goto语句,goto语句就是从程序的某个部分跳到另一个部分,可用于循环的跳出、创建循环等,但 goto语句会打乱程序运行的过程,因此在非必要时尽量用其它语句代替goto语句
运用goto语句写的关机程序
int main()
{
char arr[20] = { 0 };
printf("设备将在60秒后关机,输入“取消”取消关机\n=>");
system("shutdown -s -t 60");//此处-s为关机,-t为设置倒计时
again:
scanf("%s", arr);
if (strcmp(arr, "取消") == 0)//需要stdlib.h
{
system("shutdown -a");
Sleep(500);
printf("取消关机");
Sleep(1000);
}
else
{
goto again;
}
return 0;
}
//输入取消,取消关机
此外,今天还学了有关数据的传输的一个小知识点,实例为一个交换变量的程序
void exchange(int x,int y)
{
int z = 0;//此处为形式参数
z = x;//查地址可知x和a地址不同,此处的xy和ab时单独的变量
x = y;
y = z;
}
//当实参传递给形参的时候,形参是实参的一份临时拷贝
//对形参的修改不影响实参
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
//此处的ab叫实参
printf("交换前%d %d", a, b);
exchange(a, b);
printf("交换后%d %d",a, b);
return 0;
}
void exchange(int *px, int *py)//接收a、b的地址,远程找到并操作a、b,建立联系
{
int z = *px;//此处并不是交换地址,而是把地址所指向的值交换了
*px = *py;
*py = z;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
printf("交换前%d %d", a, b);
exchange(&a, &b);
printf("交换后%d %d", a, b);
return 0;
}
简单来说就是在自定义函数接收来自主函数的数据(实参)时,会另外创建变量(形参),此时两个函数之间的变量的值虽然相同,但是指针不同,对形参的修改不会影响实参,因此在第一段代码中,该交换数字的目标无法完成。在第二段代码中,自定义函数exchange接收的为主函数中两个变量的地址,并将地址所指向的值进行交换,因此能完成交换数据的目标。