C基础
askunix_hjh
这个作者很懒,什么都没留下…
展开
-
指针数组、数组指针、函数指针、函数指针数组详解
总结指针和数组部分的相关知识自己写的一遍博客:指针是变量单元的地址,地址指向该变量单元,因此地址形象的称为“指针”,通过指针(地址)可以找到内存单元。 (总结)1.指针是存放地址才出现的,地址是为了标示一块地址空间的; 2.指针让地址有地方存放,指针让内存的访问更加方便; 3.指针的大小在32位平台是4个字节,在64位平原创 2017-09-25 16:40:57 · 1694 阅读 · 0 评论 -
青蛙跳台阶问题求解
原创 2018-05-09 16:14:56 · 1178 阅读 · 0 评论 -
求二进制中“1”的个数
题目描述:对于一个字节(8位)的无符号整型变量,二进制表示中“1”的个数,要求算法的执行效率尽可能高。方法一 思路:首先比较好的方法是想到对二进制数进行 >>和&,这样就可以逐步求出序列中“1”的个数.(注:1&1=1, 1&0=0, 0&0=0)int Count(int num){ int count = 0; while (num) { cou原创 2018-04-26 00:20:23 · 1199 阅读 · 0 评论 -
C语言实现通讯录(增删查改、排序、清空、打印等功能)
写在前面:C语言通讯录可以用来存储1000个人的信息,每个人的信息包括姓名、年龄、性别、电话、住址,实现基本的增、删、查、改、排序、打印、清空基本功能。思路分析:首先我们可以分三个模块来解决这个问题,第一个模块我们需要一个头文件,这个头文件里可以包含一些相应信息,当实现文件和测试文件包含自己定义的头文件时便可以获得一些相关的信息。所以头文件里应该包括一个结构体,这个...原创 2018-06-17 23:04:24 · 9267 阅读 · 0 评论 -
C、CPP文件是怎样运行起来的?
C、CPP文件是怎样运行起来的?这个问题就是编译、运行的问题,在很多面试中都会遇到。(今日头条的研发岗面试题就问到cpp文件是怎样运行起来的?)在此,详细说明C语言的编译运行过程,CPP参考一下也就很容易明白了。C语言是怎么运行的?首先放一张图,说明C语言的运行过程。 C语言要想运行就要经过翻译环境,将 .c/.h 文件翻译成机器可以识别的机器码;这个翻译过程可以分为编译...原创 2018-07-04 09:45:45 · 26312 阅读 · 0 评论 -
从斐波那契数列开始了解递归和尾递归的区别
递归函数是指一些会在函数内调用自己的函数,如果在递归函数中,递归调用返回的结果总被直接返回,则称为尾部递归。尾部递归的函数有助将算法转化成函数编程语言,而且从编译器角度来说,亦容易优化成为普通循环。这是因为从电脑的基本面来说,所有的循环都是利用重复移跳到代码的开头来实现的。如果有尾部归递,就只需要叠套一个堆栈,因为电脑只需要将函数的参数改变再重新调用一次。利用尾部递归最主要的目的是要优化。...原创 2018-07-17 21:25:08 · 1710 阅读 · 0 评论 -
模拟库函数 atoi 和 itoa
atoi原型:int atoi( const char *string );atio()函数传入一个 char *,返回 int 。int my_atoi(const char *str){ assert(str); int num = 0; int flag = 1; //跳过空白字符 while (*str == ' ' || *s...原创 2018-07-14 16:31:11 · 1115 阅读 · 0 评论 -
模拟实现库函数memcpy、memmove
模拟库函数memcpy函数原型:void *memcpy( void *dest, const void *src, size_t count );函数功能: memcpy函数是从源字符串中取前count个地址字符放入到目标字符串前count个地址位置,目标字符串前count个地址原有字符将被覆盖。 memcpy还可以操作数组元素。模拟实现(第一次写的漏洞):...原创 2018-07-22 13:45:28 · 1200 阅读 · 0 评论 -
C语言的内存管理机制
内存资源是非常有限的。尤其对于移动端开发者来说,硬件资源的限制使得其在程序设计中首要考虑的问题就是如何有效地管理内存资源。本文是作者在学习C语言内存管理的过程中做的一个总结。变量概念:全局变量(外部变量):出现在代码块{}之外的变量就是全局变量。局部变量(自动变量):一般情况下,代码块{}内部定义的变量就是自动变量,也可使用auto显示定义。静态变量:是指内存位置在程序执行期间一...原创 2018-07-22 15:39:30 · 15534 阅读 · 3 评论 -
static作用 & const作用
static作用:面试题:static有什么作用?答:在C语言中,static主要定义全局静态变量,定义局部静态变量,定义静态函数。一、 定义全局静态变量 :在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点:(1) 在全局数据区内分配内存(2) 如果没有初始化,其默认值为0(3) 该变...原创 2018-08-04 22:46:41 · 1208 阅读 · 0 评论 -
静态库和动态库的区别
库的作用: 库是共享程序代码的方式,一般分为静态库和动态库。库实现了某些特定的功能模块化。方便分享和使用!异同点:2.静态库和动态库有什么特点?- 不同点:静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序可以共用,节省内存。- 共同点:静态库和动态...原创 2018-08-17 00:40:41 · 1101 阅读 · 0 评论 -
C/C++关键字 asm、inline、register、virtual、volatile 详解
asm:asm允许你在你的代码中直接插入汇编语言指令, 各种不同的编译器为这一个指令允许不一致形式, 比如: asm { instruction-sequence }or asm( instruction );inline:inline这个关键字请求编译器扩张一个给定的函数。它向这个函数发出一条插入代码的call。函数里面有静态变量,...原创 2018-02-28 11:05:07 · 3266 阅读 · 0 评论 -
详解地址和引用的区别
★ 相同点: 1. 都是地址的概念; 指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。 ★ 区别: 1. 指针是一个实体,而引用仅是个别名; 2. 引用使用时无需解引用(*),指针需要解引用; 3. 引用只能在定义时被初始化一次,之后不可变;指针可变; 引用“从一而终” ^_^ 4. 引用没有 const,指针有 const,con...原创 2018-02-14 14:24:17 · 7790 阅读 · 0 评论 -
C语言~模拟库函数Strlen,Strcpy, Strcmp.
1,strlen()函数的实现 strlen()函数功能是计算字符串中字符个数,而字符本身就是一个字符数组,只不过末尾以‘\0’结束。 int my_strlen(const char *str) //strlen函数模拟实现{int count = 0;assert(str != NULL); //断言wh原创 2017-05-07 22:14:18 · 518 阅读 · 0 评论 -
C语言~模拟实现通用冒泡排序
函数原型:void qsort( void *base, size_tnum, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) )以上原型是MSDN中查找出的qsort函数,共有四个参数;各个参数: 1、base —— 待排序数组首地址(int arr[10]) 2原创 2017-06-03 21:11:22 · 535 阅读 · 0 评论 -
模拟实现strncpy、strncat、strncmp库函数
在C语言string这个库中的strcpy,strcat,strcmp这三个函数是通过传递数组的内容来限制它们的,用传参的方式现实字符串的改变长度,模拟实现如下:1、strncpy:char* my_strncpy(char *dest, const char *src, int sz){ assert(dest && src); int i = 0; char *ret = de原创 2017-10-06 17:53:19 · 429 阅读 · 0 评论 -
C语言~size_t详解
1、sizeof返回的必定是无符号整形,在标准c中通过 typedef 将返回值类型定义为size_t. 若用printf输出size_t类型时,C99中定义格式符%zd;若编译器不支持可以尝试%u或%lu. sizeof,获取操作数占用的内存空间字节数,返回类型size_t; strlen,获取字符数组实际使用的字节数,不包含数组结尾符’\0’,返回类型size_t。2、它是原创 2017-05-14 22:12:24 · 15398 阅读 · 0 评论 -
C/C++中计算函数运行时间的两种方法
在写代码中,有时候我们需要评估某段代码或者函数的执行时间;方法就是在该段代码或者函数前面,记录一个时间T1,在代码段或函数后面记录时间T2,那其运行时间就是T2-T1,下面看看具体运算方法:方法一: clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t; 头文件:time.h/ctime 在C/C++中,还定义了一原创 2017-11-04 23:30:11 · 55091 阅读 · 2 评论 -
C语言~三子棋游戏的实现
简单的三子棋游戏是指棋盘为3*3,玩家与电脑之间的对决,谁先将各自的棋下为一排(横/竖/斜)者获胜,电脑所下位置是随机产生的;源代码如下:game,h中定义的函数:#define ROWS 3 #define COLS 3 void init_board(char board[ROWS][COLS], int rows,int cols);//初始化棋盘 v...原创 2017-05-07 22:09:06 · 571 阅读 · 0 评论 -
C/C++ 中assert()函数用法总结
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行。原型定义:#include <assert.h>void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终...原创 2017-05-06 22:14:41 · 11132 阅读 · 0 评论 -
C语言~对可变参数列表的简单理解
C语言编程中有时会遇到一些参数个数可变的函数。例如printf()函数,其函数原型为: int printf( const char* format, ...); 它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的(用三个点“…”做参数占位符),实际调用时可以有以下的形式: printf("%d",i); printf("the number is %d ,str原创 2017-08-07 21:58:06 · 451 阅读 · 0 评论 -
main函数的三个参数(argc、argc、envp)详解
函数原型: int main( int argc, char *argv[], char *envp[] ) The main function marks the beginning and end of program execution. A C or C++ program must have one function named main. If your code原创 2018-01-01 00:54:44 · 7958 阅读 · 0 评论 -
使用setjmp和longjmp函数实现跨函数跳转
setjmp和longjmp函数的跳转有别于goto语句。它是指在栈空间上的跳转。用于函数间跳转时,调用longjum函数以返回到程序的主循环中,而不是从该处理程序返回。这是一段实例代码:运行结果:...原创 2018-12-20 17:04:50 · 1278 阅读 · 2 评论