C语言基础知识

C语言基础

编译程序

  1. gcc xx.c,他会默认生成a.out的可执行文件,在a.out所在目录,执行./a.out
  2. gcc xx.c -o xx,生成一个xx可执行文件,注意不要命名成xx.c,这样会覆盖原先xx.c文件内容
  3. gcc xx.c -o xx -g -Wall的意思是开启所有的语法警告
  4. gcc之检查语法错误
  5. 每次修改完,c程序都必须要执行一次gcc
  • /如果觉得gcc太麻烦,写一个shell脚本/

hell world程序

int main()
{
    return 0;
}

  1. 可执行程序一执行,就会找一个叫做main的函数然后运行main大括号里面的语句
  2. 一个.c文件有且只能有一个main的函数
  3. 如果一个函数碰到return这个单词就代表这个函数运行结束.return后面的语句将永远不会被执行.
  4. 如果是main函数,他可将前面int省略.return也是可以省略的.
  5. main(int argc,char *argv[])
  6. include<stdio.h>是一个C语言标准输入输出库.

注释

  1. //代表单行注释
  2. /* code/注释多行:注意:/ * /*/ 第一个/ *会遇到第一个 * /匹配

注释使用情况

  1. 注释代码
  2. 解释代码
  3. 写清楚文件名,文件产权copyright,文件制作者,如果是某人:要写清联系方式

printf

  • 打印函数:打印双引号""里面的语句,\n:转义字符,代表换行

代码格式

main()
{
    
    
}

  • 注意:每碰到一个{,就要换行,再来一个tab键.

常量

  1. 1,2,3,4:整型常量
  2. 'a','b','c','d':字符常量
  3. 1.2,2.2:浮点常量
  4. "hello world":字符串常量
  5. 0xff1:地址常量

常量的特性

  1. 常量不会改变
  2. 常量不能作为左值
  3. 8,const(只读常量),define(宏常量)

变量

变量的特点

  1. 可以改变的量
  2. 可以作为左值,也可以作为右值

变量的定义

  • 在shell脚本里:变量名=值
  • 在C语言里面:数据类型+变量名;
  • 同时定义多个同种类型的变量;数据类型 变量1,变量2;

数据类型

  1. 整型数据类型:int
  2. 字符数类型:char
  3. 浮点类型:float(单精度),double(双精度)
  4. float类型的变量精确到7位

数据类型的作用

  1. 标志着后面的变量具体是接收什么类型的值
  2. 这个变量在内存中占几个字节
  • int:4
  • char:1
  • float:4
  • double:8

整型变量

  1. int value=8;
  2. int value;value=8;

字符变量

  1. char ch='c';
  2. char ch;ch='d';

浮点变量

  1. float f1=1.2;
  2. float f1;f1=1.2;

变量的使用

  1. int value;value=8;

标识符的命名规范

硬性规范

  1. 不能用数字开头
  2. 只能由字母,下划线好数字组成
  3. 不能与C语言关键字相同

建议规范

  1. 不能用拼音,多查字典
  2. 尽量使用驼峰命名法:numOfStudent,或者num_of_student
  3. 见名知义

printf具体用法

int a=6;
float=9.8;
printf("a=%d,b=%f\n",a,b);
  1. %m.nf
  • m<=n+1+整数实际部位的位数,m无效
  • m>n+1+整数实际部分的位数,m有效,左边以空格补全

地址

  1. 内存:字节:Byte是计算机存储的最小单位.
  2. 1M=1024KB,1KB=1024Byte,1Byte=8bit
  • 位:bit:一个字节占八位
  • 地址:是每一个字节所对应的编号

进制

  1. 二进制:0~1:以0B,0b开头
  2. 八进制:0~7:以0开头:
  3. 十进制:0~9
  4. 十六进制:0~ f,或者0~F:0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f:0x开头

大端小端存储法

小端法

  • 低位上的数存储在低的地址所对应的字节

大端法

  • 低位上的数存储在高的地址所对应的字节
  • 用处:一般网络传输内的时候

打印特殊字符

  1. ":\ " printf(""shangqian"\n");
  2. ':' '或'printf("'shangqian'\n");
  3. %:%% printf("%%%d\n",a);
  4. \ :\ \ printf("%d\ \n",a);

字符与ASCII编码

  1. 字符是一个特殊的整型,占8位
  2. '\0'=0,' '=32,'0'=48 'A'=65 'a'=97
  3. 全球unicode

scanf

  1. 基本用法
#include "stdio.h"
int main()
{
    int a;
    scanf("%d",&a);
    printf("a=%d\n",a);
    returnn 0;
}
  • 注意点 scanf,后面必须是取变的地址
  • 一个变量必须先定义出来再进scanf
  • 不要在scanf里多弄花样。
  1. 同时输入多个变量
scanf("%d%d",&a,&b);
  1. %d,%f,%c,%lf.%lf是输入double类型的数据

getchar()和putchar()

char ch;
ch=getchar();
putchar(ch);
putchar('\n');
//printf("ch=%c\n",ch);

数据类型转换

  1. 隐式转换:精度小的===>精度大的
    char===>short int===>int===>float===>double
  2. 强制类型转换: (数据类型)变量/常量
int a=9;
int b=8;
float c=(float)a/b;
printf("c=%f\n",c);

运算符

  1. 注意点:计算机只进行相同类型数据运算,最后算出来的结果也与他们相同的数据类型
    2.隐式转换:精度小的===>精度大的
    char===>short int===>int===>float===>double

算数运算符

  1. +     -   *  /   %  ++
    
  2. %:%左右两边的数都是整数
  • 后缀++ 前缀++ 前缀-- 后缀--

位运算符

1.|:

3:0011
5:0101
|:为0111 为7
  1. &:
3:0011
5:0101
&:0001 为1

  1. ^:
3:0011
5:0101
^ 0110 为6
  1. ~:按位取反
3:0011
~:1100 为-4

  • +7
  1. 原码:0000 0111
  2. 反码:0000 0111
  3. 补码:0000 0111
  • -7
  1. 原码:1000 0111
  2. 反码:1111 1000
  3. 补码:1111 1001
  • 数据在内存中是以数据的补码形式存在.
  • 正数取反
  1. +7
  • 原码: 0000 0000 0000 0000 0000 0000 0000 0111
  • 反码:0000 0000 0000 0000 0000 0000 0000 0111
  • 补码:0000 0000 0000 0000 0000 0000 0000 0111
  • 取反补码:1111 1111 1111 1111 1111 1111 1111 1000
  • 反码为:1111 1111 1111 1111 1111 1111 1111 0111
  • 原码为:1000 0000 0000 0000 0000 0000 1000
  • +7取反为-8
    2.-7
  • 原码: 1000 0000 0000 0000 0000 0000 0000 0111
  • 反码:1111 1111 1111 1111 1111 1111 1111 1000
  • 补码:1111 1111 1111 1111 1111 1111 1111 1001
  • 取反补码为:000 0000 0000 0000 0000 0000 0110
  • 反码:000 0000 0000 0000 0000 0000 0110
  • 补码:000 0000 0000 0000 0000 0000 0110
  • 结果:-7取反为+6

左移

正数左移

  • 3左移两位
  • 原码:0000 0011
  • 反码:0000 0011
  • 补码:0000 0011
  • 左移两位补码为:0000 1100
  • 反码为:0000 1100
  • 原码为:0000 1100
  • 结果为12

正数右移

  • 3右移两位
  • 原码为0000 0011
  • 反码:0000 0011
  • 补码:0000 0011
  • 右移两位补码为:0000 0000

负数左移

  • -3左移两位
  • 原码:1000 0011
  • 反码:1111 1100
  • 补码:1111 1101
  • 左移两位补码为:1111 0100
  • 反码为:1111 0011
  • 原码为:1000 1100
  • 结果为-12

负数右移:以符号位补全

  1. -3右移两位
  • 原码:1000 0011
  • 反码:1111 1100
  • 补码:1111 1101
  • 右移两位补码为:1111 1111
  • 反码为:1111 1110
  • 原码为:1000 0001
  • 结果为-1
  1. -6右移两位
  • 原码:1000 0110
  • 反码:1111 1001
  • 补码:1111 1010
  • 右移两位补码为:1111 1110
  • 反码为:1111 1101
  • 原码为:1000 0010
  • 结果为-2

char:占1个字节

  • 表示范围为-128~127
char ch=128;
printf("ch=%d\n",ch);

  • 结果为-128
char ch=129;
printf("ch=%d\n",ch);

  • 结果为-127

unsigned char

unsigend char a=-1;
printf("a=%d\n",a);

  • 结果为:a=255;
  • -1的原码:1000 0001
  • -1的反码:1111 1110
  • -1的补码:1111 1111
  • 由于unsigne char 是无符号数,所以不用再回原码,直接取补码;

赋值运算符

num+=i==>num=num+i;
num>>=2==num=num>>2;

计算数据类型所占字节长度

  • printf中%p是打印地址
  • printf("int所占字节长度=%ld\n",sizeof((num)));

关系运算符

  • <, >, >= , <= ,!= , ==
  • 在计算当中,关系运算符构成的运算,我们可以看成一个事件,如果这个事件成立,其结果(逻辑结果[0/1])1,如果事件不成立,其结果为0;

逻辑运算符

  1. 事件1&&事件2:并且,事件1成立并且事件2也成立,整个逻辑结果才为1;否则,整个逻辑结果为0;
  2. 事件1||事件2:或者,事件1成立或者事件2也成立,整个逻辑结果才为1;否则,整个逻辑结果为0;
  3. !事件:非,如果事件成立,逻辑结果为1,!1,整个结果为0;否则,逻辑结果为1.
  • 进阶:事件1&&事件2:如果事件1不成立,就不会执行&&后面的运算.
  • 事件1||事件2:如果事件1成立,就不会执行||后面的运算.
  • 5>3&&8<4-!0 >1.
    5>3为1,!0为1,4-!0=3,8<3=0,1&&0=0;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 1.编译程序(1)gcc xx.c,他会默认生成一个a.out的可执行文件,在a.out所在目录,执行./a.o...
    萌面大叔2阅读 1,258评论 0 1
  • 1.编译程序 (1)gcc xx.c,他会默认生成一个a.out的可执行文件,在a.out所在目录,执行./a....
    萌面大叔2阅读 459评论 0 1
  • •1 C语言程序的结构认识 用一个简单的c程序例子,介绍c语言的基本构成、格式、以及良好的书写风格,使读者对c语...
    CONLYOUC阅读 8,694评论 9 66
  • C语言预课 字节讲解 大端存储法:在高位存储低字节小端存储法:在低位存储高字节 ASC码表——共255个字符 ‘\...
    I踏雪寻梅阅读 495评论 0 0
  • 国庆假期,看着一波波出行大军,结伴而游,心里唯有向往,羡慕的份了。一部相机,几件行囊,说走就走的旅行,已被...
    文_女子阅读 814评论 0 2