
c语言
开始迷茫了
这个作者很懒,什么都没留下…
展开
-
动态内存开辟
提出动态内存分配的背景通常我们使用数组的时候,必须用一个常量来指定数组的长度,同时它的内存空间在编译时就已经分配好了。但有时候数组的长度只有在运行的时候才知道,所以提出解决方案就是提前申请出一块较大的数组。有缺陷:1、人为因素大,如果在声明时长度还是太小,那么就会发生数组越界。2、如果实际使用的元素比较少但申请大一点就会浪费内存。malloc、calloc、realoc和freemalloc(原创 2017-12-09 16:29:21 · 317 阅读 · 0 评论 -
总结sizeof()和strlen()和数组、字符数组、字符串之间的作用
sizeof()牢记sizeof()是表达式不是函数,sizeof()可以用来求变量 、数组、对象、结构体等所占空间的大小,其实只要将sizeof()操作的参数理解成类型,围绕类型就不怕一些坑。sizeof()和数组只有两种情况下数组名可以表示整个数组:(1)sizeof(数组名):此处数组名不能修饰,否则表示数组首元素的地址(2)&数组名 其他时候像数组名单独使用,或者是s...原创 2018-07-30 17:34:41 · 12839 阅读 · 2 评论 -
【剑指offer】常见malloc/free使用相关面试题
1、 以下代码有什么问题??void GetMemory( char *p ){ p = (char *) malloc( 100 );}void Test( void ) { char *str = NULL; GetMemory( str ); strcpy( str, "hello world" ); printf( str );}此题主要是GetMemory...原创 2018-07-30 11:29:15 · 886 阅读 · 0 评论 -
这样实现函数strcpy才能拿满分
以下给出的几种方案,在面试官看来,最后的答案才是完美的。 方案1:void strcpy( char *strDest, char *strSrc ){ while( (*strDest++ = * strSrc++) != ‘\0’ );}方案2:将原串用const修饰,表示不可以被修改void strcpy( char *strDest, const char ...原创 2018-07-30 11:01:04 · 232 阅读 · 0 评论 -
面试常考--------访问空指针或者野指针的后果
访问野指针大家都知道会1、引起程序崩溃,但是这样解释不够具体,为什么程序会崩溃?? 2、访问野指针导致进程异常终止这个回答相对就又深了一个层次,那么进程异常终止又是怎么回事? 所以最全面的回答应该是访问指针的时候虚拟地址就会向物理地址映射,此时页表会去查看这块地址,而这块地址被存放在只读区,当页表发现地址是无效的,就会反映给操作系统,操作系统就会发送11号信号终止此进程,所以进程异常终止程序崩...原创 2018-04-25 09:49:36 · 4366 阅读 · 0 评论 -
函数的调用过程(栈帧)
认识c/c++程序占用内存的分布: 简单看一下下面的程序: #include<stdio.h>int Add(int x, int y){ int z = 0; z = x + y; return z;}int main(){ int a = 10; int b = 20; int res=Add(a, b);...原创 2017-11-12 18:11:24 · 232 阅读 · 0 评论 -
三子棋
整理思路:1、打印棋盘并实现初始化2、模拟电脑下棋和玩家下棋3、分析谁赢的情况代码参考:game.h#include<stdio.h>#include<stdlib.h>#include<time.h>#define ROW 3#define COL 3void init(char board[ROW][COL], int row, int col);void ...原创 2017-10-29 21:37:43 · 522 阅读 · 0 评论 -
可变参数列表剖析
1、main函数的参数解析:栈帧的学习我们知道一个程序并不是从一开始就开始调用main函数的,main函数是被_CRTmainstartup调用的。 其实main函数是有参数的,我们来看看他的原型:int main(int argc, char*argv[], char*envp[]){ program - statements}argc是整形变量,表示参数的个...原创 2017-11-11 22:12:56 · 201 阅读 · 0 评论 -
浅谈递归
1.递归和非递归分别实现求第n个斐波那契数。递归首先解释斐波那契是什么? 类似于1 1 2 3 5 8 13…这样的前两个数相加得到第三个数的数列叫斐波那契数列。int fib(int n){ if (n <= 2) { return 1; } return fib(n - 1) + fib(n - 2);}i...原创 2017-11-08 21:44:55 · 180 阅读 · 0 评论 -
操作符
分类1、算术操作符:+ - * / %注意:%的两个操作数必须为整数2、移位操作符:<< 左边丢弃,右边补0>> ①算术移位:左边补符号位,右边丢弃②逻辑移位:左边补0,右边丢弃例:-1 算术右移结果为:11111111 11111111 11111111 11111111 逻辑移位结果为:01111111 11111111 11111111 1111111...原创 2017-10-18 21:18:13 · 311 阅读 · 1 评论 -
理解 指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针,回调函数
指针数组指针数组是数组,数组中的元素是指针。 例如:char*arr[10]是一个指针数组,数组名先和[]结合首先确定它就是一个数组,再者才是指针。数组指针数组指针是指针,指针指向一个数组。 对比int*p[10]和int(*p)[10],q前者是指针数组,数组中每个元素都是一个指向int型的指针,后者是一个数组指针,指向一个大小为10个整型的数组 注意:[...原创 2017-11-22 16:46:27 · 338 阅读 · 0 评论 -
自定义类型:结构体、枚举、联合
结构体定义和初始化: 基本定义:结构体,通俗讲就是打包封装,把一些有共同特性(或属于同一类事物的属性)的变量放在其内部,通过一定方法访问修改内部变量。结构体的定义方式还有很多种: 1、只有结构体:struct stu{ char name[20]; int age; float height;};2、附加结构体类型的变量的定义:struct stu{ cha原创 2017-11-26 11:47:18 · 349 阅读 · 0 评论 -
怎样向面试官证明你熟练掌握了c语言(必须清楚地说出指针相关知识)
准确的说,C语言中指针算是一个大Boss,那么我们需要掌握他什么呢?? 指针是一个常量,他是一块空间的地址,指针变量是保存空间地址的变量,指针变量的值就是空间的地址。 1、既然说指针变量的值是一个地址,那么这块地址不仅可以是变量的地址,还可以是其他数据类型结构的地址,例如指针变量中存放数组,那指针保存的就是数组的地址,存放函数那么保存的就是函数的地址。 2、既然说指针变量保存的是一块地址,那...原创 2018-07-23 00:20:32 · 4761 阅读 · 1 评论