C/C++基础纪要

1/30/2022

# 关于取值与取地址运算符(&和*)

C++ 提供了两种指针运算符,一种是取地址运算符 &,一种是间接寻址运算符 *。

指针是一个包含了另一个变量地址的变量,您可以把一个包含了另一个变量地址的变量说成是"指向"另一个变量。变量可以是任意的数据类型,包括对象、结构或者指针。

取地址运算符 & & 是一元运算符,返回操作数的内存地址。例如,如果 var 是一个整型变量,则 &var 是它的地址。该运算符与其他一元运算符具有相同的优先级,在运算时它是从右向左顺序进行的。

您可以把 & 运算符读作"取地址运算符",这意味着,&var 读作"var 的地址"。

间接寻址运算符 * 第二个运算符是间接寻址运算符 ,它是 & 运算符的补充。 是一元运算符,返回操作数所指定地址的变量的值。

请看下面的实例,理解这两种运算符的用法。

# 3.1 if 与 if-else

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int i;
    // 文件结束符(end of file)
	while (scanf("%d", &i) != EOF)
	{
		if (i > 0)//在if的括号后面不可以加;,会造成表达式无论是真还是假,都会执行后面的语句
		{ 
			printf("i is bigger than 0\n");
		}
		else {//上面的条件为假时,走else
			printf("i is not bigger than 0\n");
		}
	}
}

# 3.2 while

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

//从1加到100
int main()
{
	int i = 1;
	int total = 0;//存储最终的和
	while (i <= 100)//while后面不能够加分号,否则会死循环
	{
		total = total + i;
		i++;
	}
	printf("total=%d\n", total);
}

# 3.3 for 循环

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

//从1加到100
int main()
{
	int i, total;
	//for语句中只能有两个分号
	for (i = 1, total = 0; i <= 100; i++)//for循环后不能加分号
	{
		total = total + i;
	}
	printf("total=%d\n", total);
}

# 3.4 continue

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

//从1加到100
int main()
{
	int i, total;
	//for语句中只能有两个分号
	for (i = 1, total = 0; i <= 100; i++)//for循环后不能加分号
	{
		total = total + i;
	}
	printf("total=%d\n", total);
}

# 3.5 Break

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

//从1加到100,当和大于2000,就终止循环
int main()
{
	int i, total;
	//for语句中只能有两个分号
	for (i = 1, total = 0; i <= 100; i++)//for循环后不能加分号
	{
		if (total > 2000)
		{
			break;//当求和大于2000,就终止循环
		}
		total = total + i;
	}
	printf("total=%d,i=%d\n", total,i);
}

# 3.6 day6作业

回文数判定

12321

12321

1234

4321

把最初输入的整型数a,反过来后,再存到另外一个整型数b,判断a和b是否相等,如果相等就输出yes,不相等no

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>


int main()
{
	int a,b,c,tmp;
	while (scanf("%d", &a) != EOF)
	{
		b = 0;
		c = a;
		while (a)
		{
			tmp = a % 10;
			b = b*10+tmp;
			a = a / 10;
		}
		if (c == b)
		{
			printf("yes\n");
		}
		else {
			printf("no\n");
		}
	}
	return 0;
}

# 6.1 函数嵌套调用

一个工程当中多个文件中函数的使用

#include "func.h"

int main()
{
	int a = 10;
	a = printstar(a);//printstar(a)函数调用,a是一个实参
	print_message();//调用print_message
	printstar(a);
	return 0;

}

func.h 头文件

#include <stdio.h> //头文件中放的是函数声明

int printstar(int i);//函数声明
void print_message();//函数声明

func.c

#include "func.h"

//printstar函数定义,就是函数实现
int printstar(int i)  //i即为形式参数,也叫形参
{
	printf("**********************\n");
	printf("printstar %d\n", i);
	return i + 3;
}
//print_message函数定义
void print_message()  //可以调用printstar
{
	printf("how do you do\n");
	printstar(3);
}

# 6.2 全局变量

#include <stdio.h>

int i = 10;  //全局变量,在函数外定义的变量叫全局变量
void print(int a)//自定义的print函数
{
	printf("print i=%d\n", i);
}
int main()
{
	printf("main i=%d\n", i);
	int i = 5;//当这里加了int后,就是在main定义了一个名为i的局部变量
	printf("main i=%d\n", i);
	print(i);
	return 0;
}

# 6.3 递归

#include <stdio.h>
//函数自己调用自己就是递归,初试考的概率极低的,机试有用到
int f(int n)
{
	if (1 == n)
	{
		return 1;//一定写结束条件
	}
	return n * f(n - 1);//第一步是写好公式
}

int main()
{
	int n = 5;
	int result = f(n);
	printf("result=%d\n", result);
}

# C语言高级部分

#include <stdio.h>

//long long 32位的程序是8个字节,64位的是8个字节
int main()
{
	int i=10;
	short a=32767;
	short b=0;
	long c;//32位的程序是4个字节,64位的是8个字节
	b = a + 1;//发生了溢出,解决溢出的办法是用更大的空间来存
	//printf("%d\n", b);
	//下面是无符号数
	unsigned int m = 3;
	unsigned short n = 0x8056;
	unsigned long k = 5;
	b = 0x8056;
	printf("%d\n", b);
	//printf("i=%d\n", i);
	printf("n=%u\n", n);//无符号类型要用%u
	return 0;
}
Last Updated: 2/23/2022, 8:11:03 AM