![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c语言
文章平均质量分 64
daidaihaha
这个作者很懒,什么都没留下…
展开
-
函数的栈帧创建与销毁
#include#includeint Add(int x, int y){ int z = 0; z = x + y; return z;}int main(){ int a = 1; int b = 2; int ret = 0; ret = Add(a, b); system("pause"); return 0;}接下来按F10,并转到反汇编int原创 2017-08-07 22:43:22 · 1554 阅读 · 0 评论 -
C语言习题总结 上
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<assert.h>//1.使用c语言在屏幕上输出hello world//int main()//{// printf("hello world");// system("pause");// ...原创 2018-02-27 18:33:04 · 349 阅读 · 0 评论 -
C语言实现单链表
LinkList.h //这里面主要放函数声明,头文件等#ifndef __LINKLIST_H__#define __LINKLIST_H__#include<stdio.h>#include<stdlib.h>#include<assert.h>typedef int DataType;typedef struct Node{ Dat...原创 2018-02-11 20:23:52 · 690 阅读 · 0 评论 -
C语言链表面试题
SeqList.h#pragma once#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>typedef int DataType;typedef struct Node{ struct Node* next; DataType Data;...原创 2018-02-16 23:25:54 · 280 阅读 · 0 评论 -
if语句的书写规范
一 bool值和零比较bool类型是在c99标准中才引入的一个语法特点,用的很少,一般情况下我们都使用整形变量来充当bool变量的角色 int flag; if (flag == TRUE) { //... } if (flag == false) { //... }上面这个是错误写法。 因为在C语言中BOOL值的语义是:0表示假,非0表示真# define F...原创 2018-02-17 19:40:22 · 1193 阅读 · 0 评论 -
c语言实现静态顺序表 ------------第一次自己独立完成
Seqlist.htypedef struct SeqList{ DataType array[N]; size_t size;}SeqList;void InitSeqList(SeqList *s);void PushBack(SeqList *s, DataType x);void PopBack(SeqList *s);void PushFront(SeqList *s, ...原创 2018-02-08 17:36:58 · 263 阅读 · 0 评论 -
C语言求最小公倍数与最大公约数(4种实现)
一 最大公约数算法:1.辗转相除思想有整数a b;(1)a%b得到余数c (2)若c==0,则b就是最大公约数(3若c!=0,则a=b;b=c;继续执行(1)int GetGreatestCommonDivisor(int a, int b)//辗转相除{ int c = 1; while (c) { c = a%b; a = b; b = c; } return ...原创 2018-02-18 00:30:15 · 4054 阅读 · 0 评论 -
在C语言中怎样定义一个字符串并输入输出
在C语言中没有字符串类型,用字符数组处理字符串字符数组定义:char 数组名 [常量表达式][常量表达式]说明:一维字符数组,用于存储和处理一个字符串 。二维字符数组,用于同时存储和处理多个字符串输入输出方法:逐个字符输入输出:%c 整个字符串输入输出:%s一 :用scanf输入字符串,printf输出字符串 逐个字符处理:#includeint main()原创 2018-02-28 16:57:29 · 254047 阅读 · 13 评论 -
判断一个数是否是回文数(两种方法1.将数字翻转看与原来是否相等2.当作字符串处理看是不是左右对称相等)
方法一 :将一个整数翻转,判断翻转后的数是否与原数相等,如果相等则是回文数int JudgePalindrome(int n)//方法1{ int m = 0; int c = n;//保存n,底下用于判断是否和反过来的数相等 while (n) { m = m * 10 + n % 10; n = n / 10; } if (c == m) {...原创 2018-02-23 15:04:36 · 1776 阅读 · 0 评论 -
用C语言编写程序求一个1!+2!+3!+4!...(两种方法)
方法一:思路:用两个for循环,一个用于计算阶乘(n!),一个用于计算和(sum).代码如下,自己感悟。int main(){ int sum = 0; for (int i = 1; i <= 4; i++)//此循环用于求和 即求1!+2!+3!+4! { int ret = 1; for (int j = 1; j <= i; j++)//此循环用于计算...原创 2018-02-23 15:04:55 · 37907 阅读 · 3 评论 -
用C语言编写一个程序,对整型数组排序(冒泡排序,选择排序)
冒泡排序:void Bubblesort(int *arr, int sz)//冒泡排序{ for (int j = sz - 1; j >= 0; j--)//控制趟数 { for (int i = 0; i+1 <= j; i++)//控制每趟多少次 { if (arr[i] > arr[i + 1]) { int tmp = arr[i...原创 2018-02-23 15:05:11 · 13985 阅读 · 0 评论 -
用C语言编写程序,将多个字符串排序输出
1:有三个字符串分别是:"hello" "bit" "world".然后排序之后输出的顺序为:"bit" "hello" "worldint main(){ char str1[100]; char str2[100]; char str3[100]; char tmp[100]; scanf("%s", str1); scanf("%s",原创 2018-02-23 23:38:06 · 9151 阅读 · 1 评论 -
如何不用加法,实现两个数相加
首先我们先看5和7相加。a 5 二进制 101 b 17 二进制 10001a+b 22二进制 10100第一步:让a^b得到 10100 与a+b答案相比没有算进位第二步:让a&b得到 00001 (a&b)记录进位原创 2018-03-05 21:15:18 · 1554 阅读 · 0 评论 -
"" "\0" '0' '\0' 0 NULL “NULL” 区别与联系
一:字符'0' :char c='0',它的ASCII码为值48,内存中存放00110000字符'\0' :char c='\0',它的ASCII码值为0,表示一个字符串结束的标志(转义字符)数字0 :它的ASCII码值为0,字符表示空字符,数值表示为0,内存中表示00000000二:在数值上NULL ,‘\0' , 0是一样的,都是0.但是'0'就不同了,在ASCII中编码为48. 三:...原创 2018-04-23 16:34:37 · 1186 阅读 · 0 评论 -
简单实现一个日历
思路:1.首先你必须给一个基准年 ,在给出这一年的某一天,是星期几 例如 2000 1 1 星期6 2.那如何求2000 2 1是星期几呢?(1月1号的星期6+一月的天数)%7 要考虑平年闰年 2月天数不一样 3.那如何求2001 1 1是星期几?(2000年的一月一号+2000年的天数)%7 要考虑平年闰年天数不一样 根...原创 2018-04-27 01:30:50 · 1903 阅读 · 0 评论 -
static的用法
1.static修饰普通变量static修饰全局变量:1.作用域:改变链接属性,只在本文件有效,即使extern外部声明也不行,其他文件可定义相同名字的变量2.初始化:只能被初始化一次,如果是整型不初始化就会自动赋值为0,字符型初始化为空3.存储区:静态存储区没变static修饰局部变量:1.作用域:改变链接属性,生命周期在整个文件有效,但是出了其作用域便不可再用,因此作用...原创 2018-09-15 00:27:09 · 5785 阅读 · 0 评论 -
动态内存开辟,以及动态内存开辟中所出现的越界访问,内存泄漏等问题
一 静态内存开辟:也就是传统的内存开辟。-----一般在栈上开辟-----一旦分配好,便不能再改变,也不需要自己释放,系统自 动回收二 动态内存分配:你想要多少就开辟多少。-----在堆上开辟-----避免了静态内存分配出现的问题1.内存不足 2.内存浪费---程 序员释放 malloc ,realloc,calloc等开辟出来原创 2018-02-05 21:43:39 · 335 阅读 · 0 评论 -
extern关键字的用法
在进入今天博客正文之前,我们先来说一些基础的概念。一 编译模块对于编译的一些概念很多然已经不再清楚了,很多程序员最怕的是处理连接错误(LINK ERROR),因为它不像编译错误那样可以给出你程序错误的具体位置,这时你就特别崩溃。当在VS这样的开发工具上编写完代码,点击编译生成exe文件时,VS其实做了两步工作,第一步:将每个.C(.Cpp)和相应的.h文件编译成obj文件 第二步:将工程中...原创 2018-02-10 09:13:57 · 503 阅读 · 0 评论 -
函数可变参数列表解析,也就是函数参数不确定
c语言中可变参数是一个 比较有意思的实现,通过将函数变为可变参数的形式,可以使得函数接受任意多个参数(不确定)接下来先看一个例子:实现一个函数可以求任意个参数平均值#include#include #include int Average(int n, ...){ int sum = 0; int i = 0; va_list arg; va_start(arg, n);原创 2017-08-09 17:22:18 · 503 阅读 · 0 评论 -
strcpy,strcmp,strstr,strcat,memcpy,memmove,memset的模拟实现
模拟实现这些库函数,首先要了解他们的功能,接下来我带你去了解strcpy:功能:字符串拷贝,把源字符串src,拷贝到目标空间dest中要求:1.目标空间足够大,足够容得下src字符串。 2.目标字符串可修改,源字符串不能修改。 3.模拟实现strcpy返回值类型是char*,有返回值为了实现链式访问具体实现:把src中内容拷贝到dest中,直到拷贝过去s...原创 2017-08-16 10:55:14 · 241 阅读 · 0 评论 -
strlen的递归,常规(创建计数器),以及指针实现
strlen递归实现:#include#include#include#includesize_t my_strlen( const char*str){ assert(str); if (*str!='\0') { return 1 + my_strlen(str + 1);//递归 } else return 0;}int main(){ char*p =原创 2017-08-17 15:11:09 · 231 阅读 · 0 评论 -
strcpy,strncpy,strcat,strcnat,strcmp,strncmp,的区别与实现
strcpy,strcat,strcmp 在上篇博客中有详细讲解,在此我简提下.strcpy,strcat,strcmp是字符串不受限制拷贝,而strncpy,strncat,strncmp是字符串受限制拷贝strcpy:功能:把src所指由'\0'结束的字符串复制到dest所指向数组中原创 2017-08-18 10:12:45 · 541 阅读 · 1 评论 -
strlen与sizeof区别,以及在数组中,字符串中应用
两者区别:1. strlen函数求得是字符串实际长度,它求的方法是从开始找,直到遇见'\0结束,不算‘\0'。 sizeof不是函数,是一个操作符,返回的是变量声明后所占内存数,不是实际长度。 2.sizeof 可以用类型做参数,strlen只能用char*做参数,且必须为‘\0’结尾原创 2017-08-19 09:14:19 · 293 阅读 · 0 评论 -
指针 上 :什么是指针,指针类型,指针运算等等
1.什么是指针指针是一个变量,变量里存的是地址,通过该地址可以找到一块空间。因此也将该地址形象化称为指针。2.为什么存在指针(1)指针是为了存放地址,地址是为了标示一块内存空间的。(2)指针让内存访问更加方便。(3)指针的大小在32平台上是4字节,在64位平台上是8字节。3指针类型指针类型:例如:char*,int*,float*都是4字节,都是type*的方式ch原创 2017-08-23 11:03:05 · 4477 阅读 · 0 评论 -
const的用法,放*左边,与*右边区别
接下来看具体内容:int main(){int a = 10;a = 20;}这段代码编译时不会出错的.但是如果向前面加const,则程序会报错如果有const 修饰,还能不能改变a的值呢?上面这张图片说明const修饰的变量,不能直接修改,但是可以通过指针改变。但是这样不安全,因为本来a被const修饰,不能被改,可是现在却被通过指针改变了原创 2017-08-21 10:46:28 · 3811 阅读 · 1 评论 -
指针 中 数组指针,指针数组,数组传参,指针传参
1.指针数组指针数组是一个数组,里面每个元素是指针。初始化如下2.数组指针指向数组的指针形式如下int (*p)[5] 因为[ ]比*优先级高,因此表示一个指针必须给*p带上括号赋初值如下3.数组指针的应用:#include#includevoid print(int arr[3][4], int x, int y){原创 2017-08-23 20:38:06 · 17060 阅读 · 0 评论 -
指针 下:函数指针,函数指针数组,函数指针数组的指针,回调函数详解
1.函数指针:是指针指向函数。函数也有地址,函数地址可以通过两种方法的到(1)函数名(2)&函数名如图所示,上面两个结果一致,下面三个结果一致。结果即可说明上面结论void (*p) (const char*)=&test // void (*p) (const char*)=test,两者相同因为test与&test均表示test函数的地址如上图 :p是指原创 2017-08-24 09:05:38 · 222 阅读 · 0 评论 -
结构体
引言:数据常以组的方式存在,但是如果这些数据类型不同,就无法存在在一个数组中,在c中使用结构体可以把不同类型的值存在一起。1.结构体定义:结构体是一些值的集合,这些值称为它的成员,这些成员可能类型不一。2.结构体的声明与创建:3.结构体成员访问: 直接访问:结构体对象访问成员 符号. 间接访问:结构体指针访问他所指向对象的成原创 2017-09-21 11:47:37 · 254 阅读 · 0 评论 -
回调函数,回调函数应用,qsort函数用法,以及模拟实现qsort函数
回调函数回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数,回调函数不是由该函数的实现方直接调用,而是在特定的条件下,由另一方调用。接下来看一个快速排序函数qsortvoid qsort(void *base, size_t num, size_t width, int(*c原创 2017-08-24 22:05:07 · 269 阅读 · 0 评论 -
堆和栈的区别,以及申请方式,及效率的区别
堆和栈的区别一 申请方式栈:由操作系统自动分配,释放,存放函数的参数值,局部变量的值堆:一般由程序员分配,释放。二 申请后系统的响应栈:只要栈的剩余空间大于所申请空间,系统将会为程序提供内存,否则将报异常提示栈溢出。堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于申请空间的堆结点,然后将该节点从空闲结点原创 2017-10-03 13:35:39 · 1373 阅读 · 0 评论 -
C语言动态内存开辟malloc, realloc ,calloc,free详解
要了解掌握malloc realloc calloc 是怎样开辟空间的,就应该先知道他们是在哪开辟的,他们三都是在堆上开辟的接下来我们jiu原创 2017-10-03 15:03:34 · 776 阅读 · 0 评论 -
静态顺序表的C语言实现
顺序表:指在计算机内存中以数组形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。也就是,将表中元素一个接一个的存入一组连续的存储单元中,这种存储结构是顺序结构。采用顺序存储结构的线性表简称顺序表下来直接上代码:#include#include#include#include#define MAX 10//数组元素个数typedef int Da原创 2017-10-09 20:50:44 · 431 阅读 · 0 评论 -
c语言动态实现顺序表
之前写到过c语言静态顺序表,接着我们来实现动态的顺序表我们先来分析下这两者的不同静态顺序表:结构体只需两个成员,其中一个固定大小的数组(MAX)的数组,用来存放我们的数据。当数据增多时,可以通过改变数组大小而存 放更多数据。动原创 2017-10-11 07:35:10 · 361 阅读 · 0 评论 -
c++初识,c++与c语言区别。及函数重载,缺省值等等
1.关键字数量不同2.文件区别,即后缀名不同c语言后缀名为.cc++后缀名为.cpp3.返回值不同c语言,如果一个函数没有指定返回值类型,默认返回值类型为int,c++,如果一个函数没有指定返回值类型,默认返回值类型为void4.参数列表c语言中,函数没有指定参数列表时,默认可以接收任意多个参数。c++中,因为严格的参数类型检测,没有参数列表的函数,默认为voi原创 2017-09-25 19:03:27 · 759 阅读 · 0 评论 -
日期计算器
一 完成的功能注意:此日历只能用于计算1982年10月15日以及以后的日期1.日期+/-天数=返回日期(处理:1.如果+/-一个负的天数的情况 2.如果加之后,或减之后的日期非法)2.两个日期之间间隔的天数,日期-日期=返回的天数(处理:返回的天数不能为负)3.打印某年某月本月的日历(处理:1982年十月份)二 功能分析三 项目测试点:功能测试:(1)对输入日...原创 2018-09-13 13:29:32 · 14087 阅读 · 2 评论