C语言
文章平均质量分 79
Emily静
无愧于心
展开
-
“指针”难易题型
1.写出下列程序的输出结果:int main(){ int arr[5]={1,2,3,4,5}; int *ptr=(int*)(&arr+1);//取出数组arr的地址,加1表示跳过整个数组,ptr指向的是5后面的地址 printf("%d %d\n",*(arr+1),*(ptr-1)); //*(arr+1)表示取出数组arr的首地址,加1表示指向第二个元素原创 2017-10-06 12:52:13 · 595 阅读 · 0 评论 -
链表题--难点
判断单链表是否带环?若带环,求环的长度?求环的入口点? 判断是否带环:要判断链表有没有带环,不能按常理去判断最后一个节点的next是否为空,因为带环链表找不到最后一个节点。需借助快慢指针来解决。定义fast指针每次走两步,slow指针每次走一步,这样fast指针和slow指针如果在环里相遇,就可以断定有环,否则无环。ListNode* Is_Loop_List(ListNode* pList)/原创 2017-09-26 21:26:25 · 944 阅读 · 3 评论 -
基础链表题
1.总结顺序表和链表的优缺点,说说它们分别在什么场景下使用?2.从头到尾打印单链表 这个问题才用递归思想,设置一个边界条件,对函数本身进行调用,当满足边界条件时,递归返回,进行链表元素的打印。void Start_to_End(ListNode *pList){ ListNode *cur = pList; if (pList == NULL) { ret原创 2017-09-25 09:49:37 · 427 阅读 · 0 评论 -
单链表的基本操作
链表:链表是由一系列可以在运行时动态生成的节点组成,是一种非连续,非顺序的线性表。节点包括两部分内容:一个是本节点的数据域,另一个是下一个节点的指针域,最后一个数据元素指向NULL。接下来看一下链表的基本操作:#include <stdio.h> //头文件的引用#include <stdlib.h>#include <assert.h>#include <string.h>typedef i原创 2017-09-24 12:26:02 · 586 阅读 · 1 评论 -
指针详解(下)
指针和数组 数组名是一个指向数组起始元素的常量指针。 p[i]相当于*(p+i)int main(){ char str[6]={a,b,c,d,e,f}; char src=0; src=str[0];//等价于src=*str src=str[1];//等价于src=*(str+1) src=str[3];//等价于src=*(str+3)}数组名str代表原创 2017-08-15 15:46:06 · 248 阅读 · 0 评论 -
指针详解(上)
指针是C语言重点之一,使用非常广泛,恰当的使用会使程序看起来更简单,当然,使用不恰当的话会使指针指错了地方。 指针:一种保存变量地址的变量。 1.声明形式化一般为 type(指针类型) *name; 2.在32位平台上地址用4个字节空间来存储,在64位平台上地址用8个字节空间来存储; 一级指针:即指针,存放内存地址。 二级指针:存放指针变量地址的指针。#include原创 2017-08-06 19:02:53 · 249 阅读 · 0 评论 -
main函数参数及可变参数列表
C语言中main函数是程序的入口函数,一般在使用main函数的时候都是不带参数的,那么main函数带上参数又如何呢? main函数形式:int main(int argc,char *argv[],char *envp[]){ program;}可知main函数有三个参数: 1,argc:记录命令行参数的个数(包含第一个参数–可执行文件名),是一个整型变量; 2,argv:表示命令行原创 2017-08-04 21:10:55 · 694 阅读 · 0 评论 -
C语言程序环境和预处理
我们在写完代码后需要对代码进行编译和执行,点完按钮后编译器就自动生成了结果,难道小伙伴们不好奇编译执行过程中发生了什么事情吗?今天就来写一下程序环境和预处理。 C语言程序环境 翻译环境和执行环境 翻译环境是将源程序代码翻译成机器所能识别的二进令; 执行环境是执行已经翻译好的代码。 翻译环境:程序中的各个源代码通过编译器形成目标文件,每个目标文件在链接器中集合,链接器可以引入标准c原创 2017-07-28 21:01:06 · 584 阅读 · 0 评论 -
C语言--解析数组
数组:同一类型数据的集合,用数组名标识; 数组里面的数据称为数组的元素,用数组名和下标确定。 一. 一维数组 1.一维数组的创建和初始化 创建: 数据类型 数组名[常量表达式]; int arr[10]; //定义了一个一维数组,有十个元素char p_arr[]={'a','b','c','d'};//可以先不确定数组的大小,可根据数组的元素个数确定数组的大小错误写法:原创 2017-07-28 11:46:52 · 441 阅读 · 0 评论 -
函数调用过程解析图(函数栈帧)
函数调用过程:为函数开辟栈空间,用于本次函数的调用中临时变量的保存、现场保护。 我们最熟悉的莫过于程序入口函数main函数,main函数是在__tmainCRTStartup中调用;而__tmainCRTStartup函数是在mainCRTStartup中调用。调用过程中产生的栈空间称之为函数栈帧。 栈帧维护需要esp和ebp寄存器: esp寄存器存放指向函数栈帧栈顶的指针;原创 2017-08-02 23:22:20 · 1538 阅读 · 0 评论 -
内存中整型,浮点型的存储
整数和浮点数对于我们来说用的都已经很熟练了,那我们应该也知道变量的创建是要在内存中开辟空间的,大小由数据类型决定的。 整型 整型在内存中是以二进制补码的形式存储的。 计算机中对数据有三种表示方式:原码,反码,补码。三种表示方式都有符号位和数值位,0表示正号,1表示负号,数值位三者有所区别。 原码:将一个数直接翻译成二进制序列; 反码:除过符号位之外,其余位按位取反; 补码:在反原创 2017-07-30 20:56:06 · 429 阅读 · 0 评论 -
rand()函数详解
在编程中有时需要产生一个随机数,来满足程序所要实现的功能,这里介绍一个函数–rand()函数来实现一个随机数的产生。 使用rand()函数需要引#include<stdlib.h>头文件; rand()函数的定义:int rand(void) rand()函数的说明: 1. rand()函数其实不是真正意义上的随机数生成器,rand()函数在使用的时候还需调用srand()函数,sra原创 2017-07-24 10:31:13 · 28203 阅读 · 0 评论 -
if语句和switch语句
利用if…else构建分支结构 当程序运行的时候,执行某条语句的时候需要有一定的条件,利用if-else语句对条件进行判断,满足条件的时候,就执行下一个表达式。 if-else语句用于条件判定,语法结构如下:if (表达式) 语句1;else //else部分是可选的 语句2;当表达式为真的时候,执行语句1,当表达式为假的时候,并且有else语句就执行语句2原创 2017-07-19 21:06:19 · 606 阅读 · 0 评论 -
C动态内存开辟(malloc,realloc,calloc)
C函数库提供了malloc()和free()用于执行动态内存分配和释放。这些函数维护了一个内存池,当程序另外需要一些内存时,就调用malloc函数,malloc从内存池中提取一块合适且连续的内存。但是开辟的内存是没有进行初始化的,需要手动初始化;当一块以前分配的内存不再使用时,程旭辉调用free函数把它归还给内存池以供以后使用。malloc函数原型: void* malloc(size_t ...原创 2018-07-13 15:15:39 · 265 阅读 · 0 评论