C语言学习笔记(一)

1.头文件:#include<stdio.h>表示标准(std)io流(io),#include<stdlib.h>表示标准库,提供了system("pause");主函数标准形式

int main(void)//不接受任何一个参数的主函数,c99标准
{
retrun 0;
}

2.内建函数:一些编译器自带的函数体(c中printf()不加头文件也可输出,就是此原因)
3.整形(int ,short, long, long long)

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
//有符号
    int a = 12;//定义  
//有符号整形: -2^31~2^31-1 -2147483648~2147483647 如果整形大于2147483647则会变成负的。例如:21473648 输出为-2147483648
//无符号:0~4294967295 有符号的范围去符号相加即可 4字节同上
    int b = 13;
    int c;//声明 0xcccccccc
    int d = 2147483649;//-214748364912
    int f = sizeof(int);//2012以下低版本会报错,无变量自动提升的功能
    printf("%d\n",d);
    printf("得到类型的大小:%d\n",sizeof(int));//4 单位字节
    printf("%d %d\n", a,18);//格式化输出 %d输出一个10进制数
    printf("%d %D \n %o %O\n %x %X\n", 12,12,12, 12, 12,12);//10进制8进制16进制 输出12 D 14 O c C
    //12 = 13;//报错  左操作数必须为左值   
    a = b = 20;
    printf("%d %d\n", a, b);
//无符号
    unsigned int aa = 25;
    printf("无符号%u\n", aa);//用%u输出无符号整形输出

//短整型
    short s = 15;//2字节 int不小于short的长度
    //有符号:-2^15~2^15-1  -32768~32767
    //无符号:0~2^16-1 0~65535
    printf("%hd\n", s);//%hd进行格式化输出(%d也可以)
//长整形
    long l = 15;//一般电脑long为4字节和int一样(无符号有符号范围),标准规定long不小于int长度
    printf("long的字节:%d\n", sizeof(long));
    printf("%ld\n", l);//用ld格式化输出
//超长整形 vc++6.0不支持
    long long ll = 56;
    //有符号:-2^63~2^63-1  
    //无符号:0~2^64-1 
    printf("long long的字节:%d\n", sizeof(long long));//8
    printf("%lld\n", ll);//用ld格式化输出

    //system("pause");
    getchar();
    return 0;
}

4.内存大小:字节是计算机常用的存储单位,位是计算机最小存储单位,1字节等于8个二进制位
5.&取址,%p地址的格式化输出。%#p加上0x;vs2015使用scanf()会报错,要么改用scanf_s()或关闭sdl检查(其他方法网上很多)。

int a = 12;
    printf("%p\n",&a);//输出地址用%p
    printf("%#p\n", &a);//输出加上前缀的地址用%#p
    
    int c;
    scanf("%d%d", &c,&a);//输入格式要对应,紧挨着需要空格一下;转义字符间用什么符号隔开,输入时也要用同样的符号隔开
    scanf("%d%d\n", &c, &a);//不能加\n 加了输入不进去。不然敲多少遍回车也没用
    printf("%d %d\n", c,a);

6.浮点型(float ,double ,long double)

#include<stdio.h>
#include<float.h>//浮点型头文件
int main(void)
{
    float a = 12.26f;//未加f警告:从double向float类型截断,损失精度了
    printf("长度:%d 大小:%f\n",sizeof(float), a);//长度4 输出格式符用%f
   //内存大小 4 
    //有效数位(单精度):看有效数字,从第一个不为0的开始数。标准最低为6位数,设置多少由编译器决定。第六位四舍五入

    double a1 = 12.23;//double中加小写l或L  13.123+123 会先转double再计算
    double a11 = 122727727.23278728276727827;
    printf("长度:%d 大小:%lf\n", sizeof(double), a1);//长度8 输出格式符用%lf
    printf("%f 10%.15lf\n",a,a11);//.15表示保留15个小数位(最后一位四舍五入),10代表数字宽度,过宽在数字前用空格代替
   //内存大小 8 
    //有效数位(双精度)标准最低为10位数,设置多少由编译器决定

    long double a2 = 12.2325;
    printf("长度:%d 大小:%e\n", sizeof(long double), a2);//长度8,输出格式符用%e(科学计数法).用%lf输出也可以,但是会损失精度。只能精确到double
    printf("%e\n",FLT_MIN);//右键转定义,查看最大值的宏定义
   //内存大小 8 不小于double 
    //有效数位(单精度)标准最低为6位数,设置多少由编译器决定

    //输出时%f %lf 可以混用哈,三者都可以用
    //输入时float 用%f double和long double 只能用%lf

    getchar();
    return 0;
}

7.整数的存储是转为二进制再存,负数则是其补码(按位取反+1);小数的存储32位,首位存符号位(0为正1为负),后8位位存整数(-128~127),再后23位存小数位(2^23七位十进制数)

小数存储方式图

8.运算符优先级(由上到下递减),记忆下后缀--和++比前缀的优先级高哦。用%取最后一位数,用/10来去掉最后一位数,不用四舍五入
优先级表

优先级问题:b=a++,++比=优先级高,为啥b为啥是原来的值?黑箱子理论,把++a,a++啥的看成一箱子,这箱子叫c。我使用的值,是黑箱子的值。
优先级问题解答

9.循环(while for do···while)没有大括号“{}”默认读取到第一个分号“;”结束,有空行不影响。break跳出循环(若是嵌套循环,只跳出内层循环),continue执行下一句语句。切记:break continue只用于循环语句中。
表达式:有值的语法结构,由运算符将(变量,常量,函数返回值等)结合而成。
语句:没有明确值的语法结构
表达式图一

表达式图二

表达式图三

int i,j;
for(i=1,j=5;i<5;i++,j--)//i<5若不写的话,默认值为1,为真
printf("%d %d",i,j);//这样写也是可以的

10.循环判断语句(if switch),条件运算符 条件?表达式一:表达式二

第一种:if (条件) {
    代码块
    }
*两种不合格但又可以正常输出的语句bug
    int a = 65;
    if (60<=a<=70)
{
    {
        printf("及格\n");
//可以顺利输出及格,原因:由优先级条件语句60<=a<=70从左到右运算,
//a<=65为真这部分即为1,1<=70为真所有可以输出。但这是极不标准的!!!用逻辑表达式
}
if(a=64){
printf("及格\n");//也可以成功打印
}
-------------------------------------------------------------------------------------------------

第二种:if (条件) {
    代码块
    }else{
       代码块
}

------------------------------------------------------------------------------------------------
第三种(多个判断):if (条件) {
    代码块
    }else if(){
       代码块
}
int a=4;
switch(id)
{
case id://id必须是个整形常量表达式,且不可重复。1+2(符合),1+a(报错)。不能为小数(浮点型),一般浮点型男衣精确比较
语句;
break;//执行到没break的语句,会往下继续执行
·······
default://可以不写
语句;
}

goto: step;
step:
语句代码;


11.浮点数的比较,对于两个浮点数a, b,如果要比较大小,那么常常会设置一个精度(不设置都是false),如果fabs(a - b) <= 1e-6,那么就是相等了(还有另一种情况,a b是同种浮点数类型,都是float或者double时,也是可以比较出来的)。 fabs是求浮点数绝对值的函数(接受参数为double类型)。类似的 判断大于的时候,就是if(a>b && fabs(a - b)>1e-6)。判断小于的时候,就是if(a<b&&fabs(a - b)<1e-6)。
12.数组,数组格式,首字符为字母,下划线(不可为数字),数组名,字母数字下划线。%p是打印地址的, %x是以十六进制形式打印, 完全不同!!可以把数组的维度看成嵌套,二维数组就是在一维里又嵌套了一个一维数组

比较图

#include<stdio.h>
#include<memory.h>
int main(void) {
    int arr[2];//8字节  暂时别超过120万个字节的大小,栈溢出
    int arr1[3] = { 1,2,3 };//三个
    printf("%d\n",sizeof(arr));
    printf("%p %p %p %d\n", arr,&arr[0],arr[1],&arr[0]+1==&arr[1]);//数组地址就是首地址,利用数组地址找下一个值,地址加一(偏移)即可

    int arr2[2][3] = { {1,2,3},{1,2,5} };
    //int arr3[2][] = { { 1,2,3 },{ 1,2,5 } };//报错
    int arr4[][3] = { { 1,2,3 },{ 1,2,5 } };//通过,不报错
    printf("%p %p %p\n", arr2, &arr2[0][0],arr2[0]);//三个值都相等  二维数组名的地址,与第一个数组相等。首地址一致的,多维数组同样如此

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

推荐阅读更多精彩内容