作业反思

作业错误:数组的创建只能用常量定义初始长度,不能用变量,下为错误案例:

int n=10;
int arr[n]={0};
  • 1.
  • 2.

小任务:封装一个求最大值的Max函数,并且使用该函数判断输出最大值,代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int Max(int x,int y)
{
	if(x>y)
		return x;
	else
		return y;
}

int main()
{
	int num1 = 30;
	int num2 = 20;
	int max = 0;
	max = Max(num1,num2);
	printf("%d\n",max);
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

优化思路:作为判断的数值可以使用scanf的方式输入以替代固定数值。相较于判断两个数值,用数组存放多个数值,再用for循环遍历整个数组两两比较,最终判断整个数组的最大值,可以进一步优化代码的功能。


操作符(补)

~:按二进制位取反,例如对:1010进行按位取反,结果为0101

计算时可能涉及涉及原码,反码,和补码的概念,原码符号位不变,其他位按位取反得到反码,反码加1得到补码。若想由补码反向推出原码,则操作也要反向。注意:负数在内存中存储的时候,存储的是二进制的补码。 若一个整型是有符号的整型,那么它的二进制最高位表示符号位,最高位为0则该整型为正,最高位为1则该整型为负。

++:分为前置++和后置++;先来说后置++,顾名思义如:b=a++; 先使用a对b进行赋值,再a自增1;前置++如:b=++a; 先a进行自增1,再把自增之后的a赋值给b,需要留心甄别。

--:用法和++一样。

(类型):强制类型转换,例如:(int)3.14可以将3.14由浮点数型强制转换成整型

&&:逻辑与,表示并且的意思。两边都为真,结果才为真,其余情况都为假。所谓真假,非0即为真(默认的真是1),0即为假

||:逻辑或,左右两边只要有一个为真,则结果为真,若左右两边都为假则结果为假。

exp1?exp2:exp3  :即条件操作符也叫三目操作符。判断exp1是否为真,若为真则执行exp2,反之执行exp3.

计算机存储数据

寄存器:访问速度比高速缓存更快,空间比高速缓存更小

高速缓冲:访问速度快于内存,空间大小小于内存

内存:访问速度高于硬盘,空间小于硬盘

硬盘:访问速度较慢,存储空间较大


常见关键字

auto(自动),break(在循环中用于跳出循环中断),case,char,const,continue,default,do,double,else,enum(枚举),extern(引入外部符号),float,for,goto,if,int,long,register(寄存器关键字),return,short,sizeof,struct(结构体关键字),static,union,switch,typedef(类型定义),unsigned,void,volatile,while


知识点小插曲:static定义的静态变量的属性观察:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

void test()
{
	static int a=1;//a定义为静态的局部变量
	a++;
	printf("%d\n",a);

}

int main()
{
	int i =0;
	while(i<5)
	{
		test();
		i++;
	}
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

打印出的效果如下:

7.29C语言学习日志_整型

此时静态的局部变量a和一般的局部变量不同,每次test函数结束后a的值并没有删除重置,而是保留下来执行后续的操作。即static修饰局部变量时,局部变量的生命周期变长了。

static也可以修饰全局变量,此时static改变了变量的作用域,这样该变量只能在它定义的源文件中使用,此时其他文件不可用extern进行外部引用该变量。

我们在定义函数的时候也可以跨文件定义,在一个文件中定义函数,在另一个文件中使用extern引入该函数,随后就可以正常的调用了。但是函数一旦用static修饰,该函数的链接属性就被改变了。


#define定义常量和宏

可以用 #define 定义一个标识符来表示一个常量


指针(重难点)

如何产生地址:32位/64位,这里指的是32根或64根地址线,对应的产生232个和264个地址。最终一个地址对应的空间大小是1个字节(byte)。取地址操作符&,打印地址printf("%p",&a);存地址int* p=&a;

 小结论:指针大小在32位平台上是4个字节(byte),在64位平台上是8个字节。