C知识总结
文章平均质量分 66
Tianzez
稳健
展开
-
可变参数列表源码的剖析
这部分的知识讲起来比较复杂,这里通过一个求平均数的函数来讲解 使用可变参数,实现函数,求函数参数的平均值#include <stdarg.h>int ave (int n, ...){ int i = 0; int sum = 0; va_list arg;//① va_start(arg,n);//② for (i = 0; i<n; i++)原创 2017-11-04 18:22:55 · 358 阅读 · 0 评论 -
经典笔试题:动态内存管理
第一题:下面程序运行的结果是?void GetMemory(char *p){ p = (char *)malloc(100);}void Test(void){ char *str = NULL; GetMemory(str); strcpy(str, "hello world"); printf(str);} 解析:指针变量传参,其实是创建了原创 2017-11-25 18:46:54 · 639 阅读 · 0 评论 -
在结构体中内存对齐的规则及其重要性
在定义结构体中,一个结构体里面往往有多个变量,而这就牵涉的它们的内存分配问题。下面就说说内存分配的规则和其重要性。 内存分配的规则: ①结构体内第一个成员放在整体的零偏移处。 ②从第二个成员开始每个成员都要对齐到它的对齐数的整数倍上(每个成员的对齐数是自身的大小和默认对齐数的较小值,VS平台下的默认对齐数是8,linux下的是4) 。 ③结构体的总大小必须是所有对齐数里面原创 2017-10-09 21:29:05 · 2024 阅读 · 0 评论 -
动态内存管理(malloc、 free、 calloc、 realloc)
1.malloc声明:void *malloc(size_t size);功能:向系统申请分配指定size个大小的字节空间。返回值为void * ,表示未确定类型指针。使用示例:int *p = (int *)malloc(10 * sizeof(int));注意:在使用这块内存前,必须判断malloc是否申请内存成功(if (p == NULL)),如果内存满了,就会申请原创 2017-10-10 21:00:34 · 546 阅读 · 0 评论 -
atoi模拟实现(考虑溢出问题)
atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数,应用在计算机程序和办公软件中。atoi( ) 函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进)等。 可以通过isspace( )函数来检测),直到遇上数字或正负符号才开始做转换,而在遇到非数字或字符串结束时(‘\0’)才结束转换,并将结果返回。如果 nptr不能转换成 int 或者原创 2017-11-29 15:46:03 · 1271 阅读 · 0 评论 -
C语言自定义类型总结
1.结构体1.1 结构体类型的创建**创建一个结构体类型**Stu:struct Stu{ char name[10]; int age;};注意:这个结构体类型名称是:struct Stu,所以struct后面的Stu不能丢。 定义结构体变量:struct Stu student1;1.2结构体初始化这里结构体初始化和数组有相似之处,结构体在初始原创 2017-11-27 16:07:27 · 781 阅读 · 1 评论 -
Markdown编辑器使用技巧
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I转载 2018-01-11 13:49:27 · 287 阅读 · 0 评论 -
#ifndef 和 #pragma once 的区别
#ifndef 和 #pragma once 的区别转自:http://blog.csdn.net/jfkidear/article/details/7868662为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式。在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。方式一:转载 2017-11-21 11:17:06 · 405 阅读 · 0 评论 -
关于产生随机数函数
#include #include #include int main(){int i;srand(time(NULL)); /* srand设置好随机数种子,为了让随机数种子是随机的,通常用time(NULL)的值来当seed,time(NULL)获取系统时间,数值在1970-1-1 00:00:00 到当前时间的秒数。*/for ( i = 0; i <原创 2017-09-22 17:05:57 · 436 阅读 · 0 评论 -
C语言中的宏
1.定义标识符 定义:#define MIX 100 取消定义:#undef MIX这里的定义好了后,MIX就可直接在函数中使用,编译阶段会自动把函数中的MIX替换成100,但不是所有的MIX都会被替换。 如:printf(“MIX”);这种情况下输出的仍是MIX,不是100。使用示例:#define MIX 100int mian(){ int a = MIX...原创 2018-02-09 11:41:18 · 959 阅读 · 0 评论 -
经典笔试题:指针详解
1.下面代码输出结果是什么?int main(){ int a[5] = { 1, 2, 3, 4, 5 }; int *ptr = (int *)(&a + 1); printf("%d,%d", *(a + 1), *(ptr - 1)); system("pause"); return 0;}解析: * (a + 1):此处...原创 2017-11-19 10:03:03 · 2518 阅读 · 3 评论 -
数据在内存储存的经典列题
int main(){ signed char a[1000]; int i = 0; for (i = 0; i < 1000; ++i) { a[i] = -1 - i; } printf("%d", strlen(a)); system("pause"); return 0;} 这道题的运行结果是255。原创 2017-10-25 16:49:16 · 404 阅读 · 0 评论 -
strcmp和memcmp两个字符串比较函数
在C语言中经常遇到比较两个字符串大小的问题,这里我列出两个常用的比较函数以及它们的具体用法和两者之间的区别。strcmp函数: 函数原型:int strcmp(const char * s2,const char * s2);功能:比较字符串s1和字符串s2的大小。返回值: s1大于s2,返回值大于零 s1等于s2,返回值等于零 s1小于s2,返回值小于零特点:两个字符串之间是逐个按照它们原创 2017-10-02 16:25:34 · 2743 阅读 · 0 评论 -
sizeof与数组之间那点事
今天做题看到很多sizeof(a)、sizeof(&a)、sizeof(&a+1)之类的题,一不小心就把人弄晕了,所以今天就好好把这些整理整理。开始之前呢分享一个小技巧——数组名只有处于以下两种情况时才代表整个数组:①数组名单独在sizeof内时。② &数组名(如&a)int a[ ] = {1,2,3,4};sizeof(a) =16 数组原创 2017-10-07 11:26:42 · 1008 阅读 · 1 评论 -
学习总结2017/11/2
从2017/9/21写第一篇博客到现在,已经过了43天,下面就简单的总结一下这段时间的学习成果。 博客:原创文章53篇,主要是一些经典题、知识点总结。 书:《C语言深度剖析》看了两遍、《高质量C/C++编程》前四章、《剑指offer》面试题10道 牛客:C语言刷题100道 代码:代码量超过3000行 小项目:三子棋 扫雷不足:代码能力不足,特别是手写代码能力。原创 2017-11-02 22:04:59 · 272 阅读 · 0 评论 -
堆、栈及静态数据区详解
转自:http://blog.csdn.net/liubing8609/article/details/42362179堆、栈及静态数据区详解五大内存分区在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。栈里面的变量通常是局部变量、函数参数等。堆,就是那些由new分配的内存块,他转载 2017-10-24 20:23:35 · 1323 阅读 · 0 评论 -
谈谈malloc()和free()
文章转载自:http://www.nowamagic.net/librarys/veda/detail/2427 首页原创 2017-10-20 14:20:36 · 462 阅读 · 0 评论 -
数组的各种操作
1.数组初始化数据类型 + 数组名[元素个数] = {数组元素};如:int arr[10] = {0};这条语句翻译过来就是创建了一个数组,它里面有10个整型元素,第一个元素赋值为0,后面的9个元素没有赋值,默认为0;当然这只是一种最基本的初始化方法,还有以下三种方法可以初始化数组。①strcpy;char arr[10];strcpy(arr, "123456");②f原创 2017-10-16 21:17:13 · 357 阅读 · 0 评论 -
总结按位操作符(按位与&、按位或|、按位异或^)以及sizeof操作符
C语言中的位操作符有以下六种:& 按位与| 按位或^ 按位异或~ 取反<< 左移>> 右移1. & 按位与规则:1 & 1 = 1; 1 & 0 = 0; 0 & 1 = 0; 0 & 0 = 0;即 & 按位与操作符是双目操作符,它的作用是运算符两边均为1则结果为1,其他情况则为0...原创 2017-10-13 19:43:49 · 936 阅读 · 0 评论 -
素数求解的n种境界
求质数算法的N种境界 (N > 10)分类: 性能优化2011-12-01 22:21 13710人阅读 评论(40) 收藏 举报算法存储语言工作byte优化目录(?)[+]★引子 前天,俺在《俺的招聘经验[4]:通过笔试答题能看出啥?》一文,以”求质数”作为例子,介绍了一些考察应聘者的经验。由于本文没有政治敏感内容,顺便就转贴到俺在CSDN的镜像博客。 昨天,某个CSDN网友在留言转载 2017-09-25 15:50:51 · 7280 阅读 · 2 评论 -
个人理解:关于指针数组、数组指针、函数指针、函数指针数组、函数指针数组指针
什么是指针? 在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。所以,通俗来讲——指针就是变量,用来储存地址的变量 指针数组 & 数组指针 指针数组:它是一个数组,数组里面每个元素都是指针,数组的原创 2017-11-17 17:10:46 · 695 阅读 · 0 评论 -
main函数参数
main函数的原型:int main( int argc, char *argv[], char *envp[] ){program-statements} 第一个参数:argc是个整型变量,表示命令行参数的个数(含第一个参数)。 第二个参数:argv是个字符指针的数组,每个元素是一个字符指针,指向一个字 符串。这些字符串就是命令行中的每一个参数(字符串)。 第三个参原创 2017-11-14 19:40:14 · 1569 阅读 · 1 评论 -
函数调用的具体过程以及栈帧的创建和销毁
这里用一个简单的Add加法程序讲解函数调用过程#include <stdio.h>#include <windows.h>#include <assert.h>int Add(int x, int y){ int z = 0; z = x + y; return z;}int main(){ int a = 1; int b = 2; in原创 2017-11-03 19:21:24 · 466 阅读 · 0 评论 -
算法 —— 字符串的全排列和组合
一、字符串的全排列 &amp;&amp; 递归二、字符串的全排列 &amp;&amp; 去重 &amp;&amp; 递归三、字符串的全排列 &amp;&amp; 去重 &amp;&amp; 非递归四、字符串的组合 &amp;&amp; 递归一、字符串的全排列 &amp;&a原创 2018-06-16 16:00:25 · 902 阅读 · 0 评论