C goto语句、变量的传递

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接收的为主函数中两个变量的地址,并将地址所指向的值进行交换,因此能完成交换数据的目标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值