1.数组传参的时候传递的是数组首元素的【地址】:
void fun(int a[])
{
printf("%zu", sizeof(a));
}
int main()
{
int a[10] = { 0 };
printf("%zu\n", sizeof(a));
printf("%zu\n", sizeof(a[1]));
fun(a);
return 0;
}
fun函数形参“int a[ ]”实际上是作为指针变量,在x64系统中是8,在x86系统中是4
运行结果:40
4
8
2.空指针:
int *p = NULL;
int a = 0; 二者相似
3.猜数字游戏:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
printf("****************************\n");
printf("******** 1.play ********\n");
printf("******** 0.exit ********\n");
printf("****************************\n");
}
//0~RAND_MAX(32767)
void game()
{
//RAND_MAX;
int guess = 0;
//1.生成随机数
//0~99 --> 1~100
int ret = rand() % 100 + 1; //生成随机数的函数
//printf("%d\n", ret);
//2.猜数字
while (1)
{
printf("请猜数字:>");
scanf("%d", &guess);
if (guess < ret)
printf("猜小了\n");
else if (guess > ret)
printf("猜大了\n");
else
{
printf("猜对了\n");
break;
}
}
}
int main()
{
srand((unsigned int)time(NULL));
int input = 0;
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
//printf("猜数字\n");
game(); //猜数字的逻辑
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误\n");
break;
}
} while (input); //当input为0时结束循环,结束游戏
return 0;
}
4.库函数查询工具:
MSDN(Microsoft Developer Network)
www.cplusplus.com
http://en.cppreference.com(Eng)
http://zh.cppreference.com(Chi)
5.交换数值的函数:
void Swap(int x, int y)
{
int z = 0;
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;
}
上述Swap函数并没有完成交换参数的任务,Swap内部的x和y参数交换不会影响main内的参数a和b,即形参是实参的一份临时拷贝,对形参的修改不会影响实参
正确方法:
void Swap(int *px, int *py)
{
int z = 0;
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;
}