C语言基础知识
文章平均质量分 66
基本数据结构,语法规则,代码规范等
帅气小胖子
在学习中成长,在成长中学习
展开
-
C语言预定义学习笔记
时开始调用函数int mul(a,b) ,将实参 传递给形参,然后运算器,累加器,寄存器工作,计算出a*b,然后返回a*b的值。这样理解#s,#a与一般宏定义后的“替换文本”和带参数宏定义的“合法表达式也不同”他是对宏定义的形参做出了说明,参数做了#s说明后,宏被调用时,实参就能用字符常量代替,且可以看到。需要特别注意的是,预定义阶段并不能直接拼接字符串。也就造成了,在大量使用带参数宏定义的代码中,编译时工作量大一点,(可以理解为带参数的宏定义就是对编译器写的调用函数,),对比函数调用代码运行速度更快。原创 2023-07-24 15:49:10 · 392 阅读 · 0 评论 -
关于C指针及其扩展
形式看上去有点复杂(fun(char c)),可以看成是一个整体,这是函数本身的函数名和形式参数,接着在(fun(char c))前,加上*(指针标识符),表示返回的值是指针。从另外的一个角度理解,一般我们定义函数指针 int(*P)(int ,int),我们把P用fun(char)代替即定义了一个返回值为函数指针的函数。函数体内的为://先定义一个函数指针p1 = fun0;//把fun0的地址赋值给函数指针p1;int z;//定义一个整形变量//利用函数指针p1,调用fun0。原创 2023-09-18 16:05:31 · 123 阅读 · 1 评论 -
宏定义学习笔记2(预定义宏)
代码中的预定义宏名,除了__func__是小写,其他都是全部大写,至于为什么__func__是小写,这点我也不清楚。2:由于显示的原因打字出来,显示的是一个大横杆,其实是两个小横杠,这点在代码中看便一目了然。1:直接使用:指的时不需要我们手动定义,直接在代码区使用标识符就可以了,__STDC__:判断当前的编译器是否为标准C编译器,若是则返回值1。但是必须是包含C标准库的情况下,才可以直接使用。需要注意的是极个别的编译器可能会出现不支持以上预定义宏的情况。__LINE__:当前编译的代码的行号。原创 2023-07-24 17:41:30 · 53 阅读 · 0 评论 -
C学习笔记之(条件编译)
2:#if 后可以时任意形式的常量表达式,需要根据需要看是否需要加上(),非强制要求,但是为了防止出错,加上()也是个非常好的习惯。#if后的所有语句都被视为一个整体,直到遇到 #endif、#elif。(2)实际写代码中发现,一个头文件,或者.c文件中只能使用上面的格式一次,重复在同一代码中再次定义一个头文件,就会出错。直接在编译器中更明显,如果不符合编译条件,那么编译器直接将,其后面的代码置灰色。一:常见的条件编译指令:#if、#else、#elif、#endif、#ifdef和#ifndef。原创 2023-07-25 13:46:22 · 450 阅读 · 0 评论 -
C语言中的位运算
注意看最后一行-2的补码,和aa|bb的结果。此时又有同学提出问题,你这算的都是同一个类型的数据,如果不同数据类型,如char|float该怎么办?1)aa|bb的结果可以断定,按位或运算时,如果参与运算的数有有符号数。前言:我个人认为,C语言的两个比较有特色的点,(1)在于存在指针。为什么是-2,这又引出另外一个问题,负整数在内存中都是以补码的形式存储的。也就是说,如果我们把按位或运算的值赋值给某个值,程序会根据这个值的类型来判断结果。3)我们研究下,aa|bb的结果是如何被程序判定为-2的。原创 2023-12-05 21:56:16 · 59 阅读 · 0 评论 -
c++中的空结构体和c中空结构体的区别和联系
中保留了C语言的 struct 关键字,并且加以扩充。在C语言中,struct 只能包含成员变量,不能包含成员函数。而在C++中,struct 类似于 class,既可以包含成员变量,又可以包含成员函数。cout << "输出空类实例cla体变量stu_1的大小" <<sizeof(cla) <<endl;cout << "输出空结构体变量stu_1的大小" <<sizeof(stu_1) <<endl;cout << "输出空结构体变量stu_1的大小" <<sizeof(stu_1) <<endl;原创 2023-11-22 10:31:18 · 258 阅读 · 1 评论 -
从c语言中的字符串和字符数组开始聊起(学习笔记)
可以看出:字符Array_3输出了乱码,因为没有结束符。这两个Arry_3和Arry_4的区别和联系是什么?我们稍微修改一下Arry_5="woaiwh";Array_4有结束符,于是便可以成功打印;,尝试比较Array_4和Array_5。原创 2023-12-13 22:08:27 · 51 阅读 · 0 评论 -
C语言中的typedef详细使用方法
1:C中的typedef直译过来的语句,就是类型定义,它被发明出来的初衷就是为了,书写上的方便。我们可以用typedef来定义自己习惯使用的数据类型名称,可以替代自己所熟悉的基本类型、数组类型、指针类型以及自己定义的结构体类型、共用体类型、枚举类型等。另外类型定义如果,在每个函数内部定义,那么它的使用范围就是此函数内部,不能再其他函数中使用这个别名来定义变量,结构体等。typedef是编译阶段处理,会占用内存中的空间,如嵌入式系统中,会占用ROM或Flash中的空间,自然也需要时间去执行这段代码。原创 2023-11-21 20:50:53 · 309 阅读 · 0 评论 -
C语言中共用体(深入学习)
a_1[10],占用10个字节,故初步该union变量至少需要10个Byte,去存储。然后考虑到该结构体的最大对齐数=基类型数据最大的数据=double=8Byte。故该union的长度为16个字节。c语言中共用体的关键字为union,解释为一种特殊的构造数据类型。初步断定,则该共用体是占用8Byte,再考虑对齐要素,该union最大的元素为8。初步计算union的长度为8,8/8=0;故该共用体的长度为8个Byte。这里还有一个知识点,当用sizeof(),计算union变量的成员变量的大小时。原创 2023-12-05 19:15:00 · 77 阅读 · 0 评论 -
C语言中的格式控制符%p
printf("%p\n",变量);这里变量有几点需要注意,当使用%p个式控制符时,变量必须是地址值int a=10;int *p = &a;printf("输出指针p代表的地址%p\n",p);printf("输出变量a的地址%p",&a);还有一种特殊情况就是字符常量,和指向字符常量的指针,如下char *p_str = "xixihaha";printf("输出变量char *p_str的地址%p",p_str);printf("输出符号常量的地址%p"原创 2023-12-13 18:15:00 · 450 阅读 · 0 评论 -
【C语言】指针变量未初始化
我们知道:全局变量未赋初值,编译器会直接赋值为0;局部变量如果未赋初值,则会维持上一状态保存在该地址上的值,这个值是随机的。把这个值赋值给局部变量是没有意义的。但是指针变量是如何解决不赋初值?指针变量和普通变量一样的方式。原创 2024-02-22 17:24:08 · 759 阅读 · 0 评论