第一章:C语言数据类型和表达式
1. main 函数也可以传入参数
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("Hello World!\n");
return 0;
}
//argc表示传入参数的个数,argv[]表示数组
例如:
ls -l /usr/local/src/
以上命令会以数组的形式存入argv[ ]中
char *argv[3]={"ls","-l","/usr/local/src/"}
2. file 命令
file hello //hello是个编译后的文件
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs),
for GNU/Linux 2.6.18, not stripped
ELF:linux下的可执行程序的格式(比如C程序)
LSB:小端字节序
executable:可执行的
dynamically linked:动态库
3. rz 命令
把 linux 中文件下载到 windows 下。
4. 编程语言发展历程
机器语言
00 01 02 // 00表示加
01 03 02 // 01表示减
02 // 02表示搬运
汇编语言
ADD 01 02
SUB 03 02
as 汇编器把汇编语言翻译生成二进制的机器语言
由于不同的机器"ADD"等命令不同,还有汇编器不同,不具有可移植性
C语言
1+2
C语言 ——> 汇编(gcc命令) ——> .o (机器语言)——> .exe(可执行)
5. 程序入门
#include <stdio.h> // 单行注释:包含系统的头文件
int add(int a, int b); // 函数声明
int main(void)
{ // 花括号、程序体、代码块
int a = 500; // 定义变量初始化
int b; // 定义变量,那这时的值是随机值
b = 20; // 变量赋值
printf("Total: %d\n", add(a, b)); // 函数调用,这里的a和b是实参
}
/* 返回 a+b 的值 */
int add(int a, int b) // 函数定义,这里的a和b是形参
{
return a+b;
}
6. 关键字
signed unsigned char short int long double float
void enum union struct volatile
auto const register restrict sizeof static typedef
if else for while do switch case default break continue goto
inline extern return
C90关键字: signed void
C99关键字: _Bool(true false) _Complex _Imageubary
char ch = ‘a’
// 存的数据并不是a,存的是0x61
volatile
volatile int reg=10; // volatile,防止被优化
sleep(2);
if( reg==10 ) // 此语句是废话,在寄存器中会被优化
{
do_something;
}
const 常量
const a=10;
a=20; // 不能修改a的值
register 寄存器常量
int a=10; // a存放到内存
register int a=10; // a存到寄存器,cpu取数据是在寄存器里面取的
//寄存器是有限的,如果没有那么多的寄存器,a还是存放到内存中
sizeof
char *p="Hello world";
sizeof(p); // 4/8,p是一个指针,指向数组的首地址
strlen(p); // 11