自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 简单通讯录2.0(利用动态内存开辟)

  在通讯录实现1.0中上利用了结构体与数组实现了基本要求,但其在空间利用率有很大不足,故此利用动态内存开辟对程序进行修改。   首先要对结构体的设置进行修改(个人信息属性可不必修改),修改后结构体如下所示: typedef struct Contact{ PeoInfo *data;//放弃数组改为指针 int sz; int capacity; //...

2018-08-03 10:20:07 427

原创 简单通讯录1.0(利用结构体数组)

简单通讯录1.0(利用结构体数组)  基于对结构体与数组部分的学习,现利用相关知识实现一个简易的通讯录。程序运行可实现基本的“增删改查”以及按照姓名排序,打印等基本操作。   程序主要由两个结构体记录相关数据,一个是用于记录个人属性信息(struct PeoInfo)另一个用于记录通讯录信息(struct Contact)。   结构体设置如下typedef struct PeoInf...

2018-08-03 10:00:17 1161

原创 字符串类函数模拟实现(strlen / strcpy / strcat / strcmp / strstr / memcpy / memmove)

  字符串类型是C语言中并没有被显式定义的数据类型,字符串常以字符串常量的形式出现或存储与字符数组当中。当程序不会对字符串进行修改是可以将其定义为字符串常量(文字常量区),其他形式则均存储于字符数组(栈)或动态分配的内存(堆)中。  1.求字符串长度(strlen)  2.复制字符串(strcpy/strncpy)  3.连接字符串(strcat/strncat)  4.字符串比较(str...

2018-08-02 17:28:29 471

原创 使用动态内存可能出现的问题总结(笔试题解析)

  在使用动态内存分配程序中,常常会产生不易发现的错误,这其中就包括对NULL指针进行解引用,访问未知内存区域(越界访问&访问未初始化指针指向区域),内存泄漏,释放非动态内存开辟空间(向free函数传递一个并非由malloc函数返回的指针),释放动态内存开辟的部分空间,空间释放后利用指针被继续使用,不检查空间分配结果。 问题一:访问未知内存区域 问题二:对NULL指针进行解引用访问 ...

2018-08-02 15:56:19 5642 1

原创 《C语言深度解剖》20道习题解析

1.下面的代码输出是什么?为什么?void foo(void){ unsigned int a = 6; int b = -20; (a + b>6)? puts(">6"):puts("<=6&a

2018-08-01 14:23:06 3906 3

原创 memcpy / memmove模拟实现

memcopy实现  memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。   需要注意的是:  memcopy只能实现源内容与目标内容在内存上没有重叠的情况,当源与目标的空间占用可能会发生重叠memcopy就不能完成正常的工作。  由于memcopy实现的是内存间的拷贝,那么它的偏移量就是一个字节,与传入的参数指针所指...

2018-07-30 22:05:03 311

原创 可变参数列表分析及printf函数实现

可变参数列表分析  根据以往函数学习的经验我们可以发现当我们在调用函数时,会向函数传递固定数量的参数,参数列表更是在设计函数时就已经固定。那么函数的参数个数在函数调用时能改变吗?答案是一定的。   以一个求平均数的函数为例,调用函数时向其传入不等数量的参数,看看结论如何。#include<stdio.h>#include&

2018-07-27 19:13:03 523 1

原创 Main函数参数分析及实例(计算器实现)

Main函数参数分析  在学习C语言函数时我们不难发现几乎所有被调用的函数都具有自己的参数列表,那么作为程序入口的main函数又是否具有参数呢?   Main函数虽然是整个C程序的入口但却不是整个函数调用中的第一个,当程序执行时main函数被main函数被 __tmainCRTStartup调用, __tmainCRTStartup则又被 mainCRTStartup函数调用。在日常...

2018-07-27 11:59:34 792

原创 函数调用过程分析

函数调用过程分析  在分析C语言函数调用过程之前我们有必要理解一下程序内存结构。内存空间被划分为:栈区(heap)、堆区(stack)、静态全局区、文字常量区以及函数代码区。(此处只是内存区域的大致划分,已经能够支撑后文将要讨论的内容)其结构如下图所示:   栈区主要用于系统自动进行分配局部变量,函数形参空间。它位于内存中相对较高的位置,地址由高向低增长。(此处的堆栈与数据结构中的堆栈并...

2018-07-26 22:19:11 1186

原创 二维数组和二维数组名

二维数组和二维数组名  对于一位数组我们认识到其数据元素在内存中是按线性顺序依次排列的,且一维数组名的值是一个指针常量。那么二维数组在内存中又是怎么存储的,其数组名又有什么含义呢?   定义一个二维数组: int arr   [3] [4] = {{1,1,1,1},{2,2,2,2},{3,3,3,3},{4,4,4,4}};  我们可以将一个二维数组看做是一个其中元素为数组...

2018-06-26 05:50:40 7579 6

原创 指针数组,数组指针,函数指针及应用(回调函数)

指针数组与数组指针  当我们在学习指针与数组时总会遇到两个令人容易混淆的概念:数组指针与指针数组。   在这里数组指针是指向数组的指针,其本质为指针指向的对象是数组。由于数组的形式多样所以数组指针的表达也十分多样。   同理,指针数组就是存放指针的数组,其本质为数组。   由于“[ ]”的优先级高于“ * ”的优先级,指针数组与数组指针的表达可做如下表示:int p1 [10];...

2018-06-26 04:36:30 12068 4

原创 数组名与指针的关系

数组名与指针的关系  在刚刚接触到数组与指针时,我想最常苦恼的问题就是数组名与指针之间有什么关系了吧。但是他们两者之间真的有什么数不清道不明的关系吗?答案无疑是否定的!接下来就让我们来一探究竟吧!  首先我们需要了解一下数组与指针的定义:数组: 有序的元素序列,数组名有限个类型相同的变量的集合命名。数组在内存中所占的大小由数组长度以及成员类型大小决定。指针: 又称指针变量,在32位...

2018-06-26 01:31:33 21026 7

原创 str类函数的实现0.3——strcmp/strncmp

strcmp函数原型:extern int strcmp(const char *s1,const char * s2);在头文件:string.h中,功能:比较字符串s1和s2。说明:当s1s2时,返回正数。#include #include #include int my_strcmp(const char*s1,const char*s2){ assert(s1);

2016-11-08 08:48:44 451

原创 str类函数的实现0.2——strcat/strncatstr

strcat函数原型:extern char *strcat(char *dest,char *src);包含于#include 头文件中 功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。#include #include

2016-11-06 17:51:42 497

原创 str类函数的实现0.1——strcpy / strncpy

1:模拟实现strcpy函数以及strncpy函数strcpy函数:顾名思义字符串复制函数:原型:extern char *strcpy(char *dest,char *src); 功能:把从src地址开始且含有NULL结束符的字符串赋值到以dest开始的地址空间,返回dest(地址中存储的为复制后的新值)。要求:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的

2016-11-06 16:32:16 456

原创 c语言——数组名和&+数组名的区别

在学习c语言的过程中我们可以发现一个一维数组的的数组名往往具有两层含义:  一. 作为数组名代表整个数组  二. 作为指针代表数组的首元素地址(因此很容易把数组和指针混为一谈)。当数组名作为首元素的地址时:int main(){ int arr[5]; int*p = arr; printf("arr=%d\n",arr); printf("arr+1=%d\n",arr+1

2016-10-10 19:59:46 10936 1

原创 C语言中可能忽略的“注释”

在C语言的编写过程中为了能让其他人能看懂我们所写的代码添加必要的注释就显得尤为重要,于代码相比注释虽然在编译时会被编译器剔除不予执行,但书写不当的注释总会给我们带来一些令人头痛的Bug。        在C语言环境中支持的注释风格有两种:         1.以 //  开始的单行注释,允许嵌套          2.以 /* 为开始  */为结束的块式注释,不能嵌套。 注释时

2016-09-22 22:23:26 1248

原创 腾讯面试题——返回一个数二进制序列中1的个数

题意:要求返回一个数二进制序列中1的个数           要获取一个数的二进制序列1:利用连除法将序列依次逆序输出。2:利用位运算直接从内存中调用。方法一:连除法int count_bits_one(int unsigned num){int count = 0;while(num){if(num%2==1) /*利用将十进制数字转化为二进制数字的基本方法连除法

2016-09-21 09:24:25 652

原创 用C语言实现两变量内容交换的N种方法

一:创建变量实现交换1.#include int main(){ int a = 10; int b = 20; int c; printf("before change:a=%d b=%d\n",a,b); c = a; a = b; b = c; printf("after change:a=%d b=%d\n",a,b); return 0

2016-09-20 08:21:17 4673

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除