C语言知识
黎晓舞指
这个作者很懒,什么都没留下…
展开
-
指针 和 引用的区别
区别:1.指针是一个实体,而引用是一个别名。(程序编译时,将指针和引用添加到符号表时,指针放入的时“指针变量的地址”,而引用则放入的是“所指向对象的地址”。所以说引用不可以改变,而指针可以。)符号表是什么以及它的作用看链接文章: 符号表的作用和地位2.指针的内容可以改变,且可以为空,而引用所对应的值不能发生改变,且不能为空。3.指针 sizeof 得到的是指针类型的大小(32位平台是 4字节,64 为8字节),而 引用sizeof得到的是它所代表的对象的大小。4.指针要想对对象进行操作,需要解引用原创 2020-07-15 11:22:51 · 1446 阅读 · 0 评论 -
宏定义的优缺点
一、优点提高代码的可读性,方便修改。提高程序的运行效率:使用带参数的宏既代替了函数的功能,有避免了函数入栈和出栈操作,减少了系统的开销,提高了运行的效率。二、缺点1.由于使用宏的时候,只是进行简单的字符替换,不会对类型进行检查,存在安全隐患。2.由于宏是直接替换的,所以会导致代码稍微长一点。3.嵌套定义过多可能会影响程序的可读性,会容易出错。4.边界效应。由于宏定义的时候,其各个分...原创 2020-03-04 15:53:06 · 3319 阅读 · 0 评论 -
const 和 define宏定义常量的区别
1.类型const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。2.内存宏定义的常量在预处理阶段就进行了替换,因此程序运行时内存的常量区是没有宏定义的常量的,而const定义的常量存在内存的常量区。3.调试有些集成化的调试工具可以对const 常量进行调试,但是不能对...原创 2020-03-03 17:15:55 · 473 阅读 · 0 评论 -
C语言 关键字static的用法
关键字static在C语言中: static是用来修饰变量和函数的修饰局部变量修饰全局变量修饰函数1.修饰局部变量看下面两段代码://代码1#include<stdio.h>void test(){ int i=0; i++; printf("%d ",i);}int main(){ for(int i=0;i<10;i++) { te...原创 2019-09-06 17:38:24 · 163 阅读 · 0 评论 -
编译 与 链接 详解
编译与链接过程详解C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号括起的部分,其余则为链接过程。过程...转载 2019-09-06 16:42:41 · 3104 阅读 · 0 评论 -
位段、联合体(共用体)详解、枚举 -------- 用共用体判断大小端
一、位段1.什么是位段?有些数据在存储时并不需要占用一个完整的字节,只需要占用一个或几个二进制位即可。例如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位。正是基于这种考虑,C语言又提供了一种叫做位域的数据结构。位段的声明和结构是类似的,有两个不同:.位段的成员必须是 int、unsigned int 或signed int 。位段的成员名后边有一个冒号和一个数...原创 2019-09-06 09:37:52 · 1231 阅读 · 0 评论 -
结构体内存对齐详解
我们已经掌握了结构体的基本使用了。 现在我们深入讨论一个问题:计算结构体的大小。内存对齐先来讨论这个问题:为什么存在内存对齐?大部分的参考资料都是如是说的:平台原因(移植原因): 不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址 处取某些特定类型的数据,否则抛出硬件异常。性能原因: 数据结构(尤其是栈)应该尽可能地在自然边界上对齐。 原因在于,为了访问未对齐...原创 2019-09-05 10:45:15 · 787 阅读 · 0 评论 -
atoi 与 itoa的用法
atoi头文件:#include<stdlib.h>函数声明: *int atoi(const char str)功能: 把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。参数:str --要转换为整数的字符串。返回值:该函数返回转换后的长整数,如果没有执行有效的转换,则返回零。使用举例:#include<stdio.h>#include...原创 2019-09-05 08:51:53 · 358 阅读 · 0 评论 -
memcpy 函数、 memmove函数用法及模拟实现
一、memcpy 内存拷贝函数函数描述:void * memcpy ( void * destination, const void * source, size_t num )功能: 从存储区 source复制 n 个字符到存储区 destination。参数:destination-- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。source-- 指向要复制的...原创 2019-09-04 16:21:43 · 208 阅读 · 0 评论 -
常见库函数 strcpy,strlen,strcmp,strstr ,strcat的用法及模拟实现
常见库函数1.strcpy字符串复制函数头文件:#include<string.h>函数原型char * strcpy(char * strDest,const char * strSrc);该函数功能是将后面字符串的内容复制给前面的字符串。源字符串 即后面的字符串保持不变,前面的字符串被改变。看下面的代码:#include<stdio.h>#includ...原创 2019-09-03 23:34:48 · 658 阅读 · 0 评论 -
函数指针 、函数指针数组 、函数指针数组的指针
在指针的学习过程中有这么几种指针在定义是经常会让我们犯错:函数指针、函数指针数组、函数指针数组的指针。下面我们逐个了解这几种指针。一、 函数指针函数指针顾名思义:指向函数的指针。我们知道整型、浮点型、字符型指针存放的都是其对应变量的存储地址,那么很容易可以理解,函数指针存放的就是函数的地址。函数的地址是什么呢? 我们看下面的代码:void test(){ printf("hello ...原创 2019-09-03 20:42:38 · 131 阅读 · 0 评论 -
C语言 指针与数组的区别与联系
什么是数组:数组是用于存放多个相同类型数据的集合。什么是指针:指针是一个变量,但是与其他变量不同,指针存放的是其他变量在内存中的地址。下面我们谈谈指针与数组的不同:1.赋值同类型的指针变量可以相互赋值,数组不可以,只能一个一个的赋值。2.存储方式数组:数组在内存中是连续存放的,开辟一块连续的内存空间。数组是根据数组的下进行访问的,多维数组在内存中是按照一维数组存储的,只是在逻辑上是...原创 2019-09-03 19:35:07 · 410 阅读 · 0 评论 -
C语言 浅谈《数据存储》
学习C语言的我们知道,数据的创建是在内存中开辟空间的。数据类型的不同,对应开辟出来的存储空间的大小也会有所不同,那么数据在内存中具体是怎么进行存储的呢?正反补码在32位的系统中,一个int是四字节,数据在内存中以补码的形式存储的。正数的补码就是它本身负数的补码等于它取反加1如上图所示:正整数a在内存中的存储地址为0X00C7FBB4 存储格式为03 00 00 00负整数b在内...原创 2019-09-02 14:31:06 · 136 阅读 · 0 评论 -
字符串序列化神器《sscanf》《sprintf》的使用 C++11《to_string》
sprint头文件:#include<stdlib.h>C 库函数 int sprintf(char *string, char *format [,argument,…]);用途:该函数可以将不同类型的多个数据序列化的写入一个字符串buff中,比起strcat(连接两个字符串)函数将会是更加的方便快捷。返回值 int :该函数的返回值为int,写入成功时,返回的是写入的b...原创 2019-07-10 11:38:37 · 833 阅读 · 0 评论 -
关键字signed的用处
在编写程序时,声明一个整型变量时,经常会用到unsigned这个关键字来声明一个无符号的整数,而声明一个有符号的整形时通常不需要写signed关键字,就会默认我们要的是一个有符号的整数,那么问题来了,关键字signed有什么用处?查了资料以后,C语言标准清楚的规定,char,signed char,unsigned char是三种不同的类型。char 会根据具体实现场景,而决定是signed,...原创 2019-02-21 20:16:24 · 1322 阅读 · 0 评论