#include <stdio.h>
int main()
{
/* 我的第一个 C 程序 */
printf("Hello, World! \n");
return 0;
}
main() 函数,代码从 main() 函数开始执行
/* ... */ 用于注释说明
printf() 用于格式化输出到屏幕
#include 是一个预处理命令,用来引入头文件
return 0; 语句用于表示退出程序
C 编译器 c语言属于编译型语言,也就是要把源代码,转换成计算机所理解的语言。
令牌可以是关键字、标识符、常量、字符串值,或者是一个符号。分号是语句结束符。
C 标识符是用来标识变量、函数,或任何其他用户自定义项目的名称;
只包含空格的行,被称为空白行,可能带有注释,C 编译器会完全忽略它。
基础数据类型:整数类型和浮点类型。
void 表明没有可用的值。
派生类型:指针类型、数组类型、结构类型、共用体类型和函数类型。
推荐大家可以去菜鸟教程学习:菜鸟教程
类型大小:
#include <stdio.h>
int main()
{
printf("int 存储大小 : %lu \n", sizeof(int)); // %lu 为 32 位无符号整数
return 0;
}
#include <stdio.h>
#include <float.h>
int main()
{
printf("float 存储最大字节数 : %lu \n", sizeof(float));
printf("float 最小值: %E\n", FLT_MIN );
printf("float 最大值: %E\n", FLT_MAX ); //%E 为以指数形式输出单、双精度实数
printf("精度值: %d\n", FLT_DIG );
return 0;
}
变量:是一个盒子;变量的名称可以由字母、数字和下划线字符组成。
extern int i; //声明,不是定义
int i; //声明,也是定义
变量的声明有两种情况:
- 1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。
- 2、另一种是不需要建立存储空间的,通过使用extern关键字声明变量名而不定义它。
C 中有两种类型的表达式:
- 左值(lvalue):指向内存位置的表达式被称为左值(lvalue)表达式。左值可以出现在赋值号的左边或右边。
- 右值(rvalue):术语右值(rvalue)指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。
变量是左值,因此可以出现在赋值号的左边。数值型的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。
常量
0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制
\a | 警报铃声 |
\b | 退格键 |
\f | 换页符 |
\n | 换行符 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
#include <stdio.h>
int main()
{
printf("Hello\rWorld\n");
printf("hello\tworld\n");
printf("黑马程序员\n");
return 0;
}
定义常量的方式:
- 使用 #define 预处理器。
- 使用 const 关键字。
#include <stdio.h>
#define pi 3.14 //定义pi常量
int yuan(int r){ //定义函数
int ch;
ch=2*pi*r; //周长
return ch;
}
int cft(){
const int length=5; //长
const int width=3;// 宽
int s;
s=length*width; //面积
return s;
}
int main()
{ int re;
int result;
re=yuan(3);
res=cft();
printf("%d\n",re);
printf("%d",result);
return 0;
}
存储类
auto 存储类是所有局部变量默认的存储类。
register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量。这意味着变量的最大尺寸等于寄存器的大小(通常是一个字),且不能对它应用一元的 '&' 运算符(因为它没有内存位置)。
寄存器只用于需要快速访问的变量。
static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。
static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。
全局声明的一个 static 变量或方法可以被任何函数或方法调用,只要这些方法出现在跟 static 变量或方法同一个文件中。
extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当您使用 extern 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置。通常用于当有两个或多个文件共享相同的全局变量或函数的时候。
运算符
算术运算符
% | 取模运算符,整除后的余数 | B % A 将得到 0 |
++ | 自增运算符,整数值增加 1 | A++ 将得到 11 |
-- | 自减运算符,整数值减少 1 | A-- 将得到 9 |
关系
== | 检查两个操作数的值是否相等,如果相等则条件为真。 | (A == B) 为假。 |
!= | 检查两个操作数的值是否相等,如果不相等则条件为真。 | (A != B) 为真。 |
逻辑
与&&,或||,非!
位运算符
位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值。
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
赋值
+= | 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 | C += A 相当于 C = C + A |
-= | 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 | C -= A 相当于 C = C - A |
*= | 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 | C *= A 相当于 C = C * A |
/= | 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 | C /= A 相当于 C = C / A |
%= | 求模且赋值运算符,求两个操作数的模赋值给左边操作数 | C %= A 相当于 C = C % A |
<<= | 左移且赋值运算符 | C <<= 2 等同于 C = C << 2 |
>>= | 右移且赋值运算符 | C >>= 2 等同于 C = C >> 2 |
&= | 按位与且赋值运算符 | C &= 2 等同于 C = C & 2 |
^= | 按位异或且赋值运算符 | C ^= 2 等同于 C = C ^ 2 |
|= | 按位或且赋值运算符 | C |= 2 等同于 C = C | 2 |
其他
sizeof() | 返回变量的大小。 | sizeof(a) 将返回 4,其中 a 是整数。 |
& | 返回变量的地址。 | &a; 将给出变量的实际地址。 |
* | 指向一个变量。 | *a; 将指向一个变量。 |
? : | 条件表达式 | 如果条件为真 ? 则值为 X : 否则值为 Y |