C语言
Makefilehoon
萌妹子初学者,请各位多多指点!
展开
-
sizeof和strlen的区别
1.sizeof的用法: 计算的是分配的内存空间的大小,不...原创 2018-01-11 09:36:33 · 329 阅读 · 0 评论 -
内存的状态图
我们知道,一个进程在内存中的布局如图1所示: 其中.text段保存进程所执行的程序二进制文件,.data段保存进程所有的已初始化的全局变量,.bss段保存进程未初始化的全局变量(其他段中还有很多乱七八糟的段,暂且不表)。在进程的整个生命周期中,.data段和.bss段内的数据时跟整个进程同生共死的,也就是在进程结束之后这些数据才会寿终就寝。 当一个进程的全原创 2018-02-07 08:51:32 · 1054 阅读 · 0 评论 -
TCP/IP五层的详细介绍
一、网络七层模型 20世纪70年代中,为了优化数据库系统设计,支持数据库系统的访问,美国的一个互联网研究小组提出了一个结构化的分布式通信系统体系结构(共七层),他们内部称之为分布式系统体系结构(DSA),1977年英国标准化协会向国际标准化组织(ISO)提议,为了定义分布处理之间的通信基础设施,需要一个标准的体系结构。后来,ISO就开放系统互联(OSI)问题成立了一个专委会(TC ...原创 2018-02-23 19:31:42 · 4243 阅读 · 0 评论 -
主机字节序和网络字节序的详解:
这篇文章已经写得足够全面了,我直接转载过来用:小端存储:低地址存放数据的高位(地址是从左往右依次增大)大端存储:高地址存放数据的高位(数据位是从右往左依次增大,比如说个十百千万)我们都知道,如今的通讯方式已经趋向与多样化,异构通信(计算机软件(操作系统) + 计算机硬件(内核架构,ARM,x86)不同)也已经很普遍了,如,手机和电脑中的qq进行通信,,,同时,在计算机设计之初,对内存中数据的...转载 2018-02-23 19:47:12 · 1738 阅读 · 2 评论 -
关于内存的思考题
关于申请内存的问题,我也很头疼,每次报错不知道为什么,一个一个来吧!1.用把malloc不放在自己定义的函数里面,编译报错,放到自己定义的函数里面,编译通过,不知道为什么!#include<stdio.h>#include<string.h>#include<stdlib.h>void fun(char *p){ p=(char *)malloc(100);...原创 2018-02-23 20:13:44 · 717 阅读 · 0 评论 -
字符编码 多字节编码 单字节编码 宽字节编码
1、基础知识计算机中储存的信息都是用二进制数表示的,用8位二进制来表示一个字节,这样一个字节就可以表示2的8次方(256)个字符,这样所有的英文字母,标点符号等就都可以被表示出来了,这就是最初的ASCII码,事实上ASCII码只用了127位。字符集(Charset):是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符编码(Charact...转载 2018-02-24 19:51:16 · 1267 阅读 · 0 评论 -
C语言中字符和数字的问题
这个问题对我来说真的很烦,看了忘,忘了看。1.首先我们来讨论一下字符'0'和数字'0'的区别。1.数据类型不同,数字型有int .long 之分,字符型有char,浮点型有float,double。 如果用十六进制表示,数字0位0x00,字符'0'为0x30.2.数字与字符之间的转换:(1)代码一:字符+数字=数字(会被强转成数值类型) #include<stdio.h>int ma...原创 2018-02-24 20:20:12 · 7170 阅读 · 0 评论 -
如何把字符串类型转换成数字类型?
方法一:#include<stdio.h>int main(){ int i=0,num=0; char *a="45678"; for(i=0;i<5;i++) { num=num*10+a[i]-'0'; //这里是完成一位数的转换,比如i=0,num=0*10+4=4,i=1,num=4*10+5=45,一直到后面,就全部转化了 } pr...原创 2018-02-25 14:15:40 · 4896 阅读 · 0 评论 -
进程和线程的区别
1.什么是进程?什么是线程?什么是程序?程序:程序是一组有序指令的集合。进程:进程表示资源分配的基本单位,用户运行自己的程序,系统就会创建一个进程,并为它分配资源。(这些资源包括表格,内存空间,磁盘空间,I/O设备等等,然后把该进程放入进程的就绪队列。进程调度程序选中它,为它分配CPU及其他有关资源,该进程才真正运行。进程是系统中的并发运行单位)。线程:线程是进程某一路单独运行的程序,也就是进程中...原创 2018-02-25 16:12:14 · 290 阅读 · 0 评论 -
XML文件的解析
1.XML详解:XML:可扩展标记语言,XML是互联网数据传输的重要工具,他可以跨越互联网任何技术的平台,不受编程语言和操作系统的限制。作用:XML有助于在服务器或者WEB之间穿梭结构化数据,处理结构化文档信息。结构:标记数据,定义数据类型,允许用户对自己的标记语言进行定义的源语言。2.XML作用及其特点:2、xml的特点及作用XML与操作系统,编程语言的开发平台都无关,可以实现不同操作系统之间的...原创 2018-05-11 00:04:29 · 844 阅读 · 0 评论 -
指针的详解
指针指向的是地址,指针就是地址,类似于酒店的门牌号,指针指向的值就是酒店房间里存放的东西。修改的指针的值其实就是修改了酒店房间里存放的东西,改了指针的地址或者指向,就是修改了房间号也就是换了房间。1 #include<stdio.h> 2 int main() 3 { 4 int a=10; 5 int*p=&a; 6 prin...原创 2018-05-23 00:04:55 · 880 阅读 · 0 评论 -
指针的详解
说真的,我学了一年C/C++了,指针我还是没太理解,一点一点的来吧。1.关于指针移动的问题,指针和数组可以互换的,指针就是数组,数组也可以退化为指针,数组名就是指针的首地址。 char *p="zhanghong";也就是说0对应z。也就是说1对应h。也就是说2对应a。p[0] 是错误的,没有p[0]这一项。也就是说p[0]就是p,p[0]。p[1]指向h。p[2]指向a。#include<...原创 2018-06-17 23:00:23 · 177 阅读 · 0 评论 -
定义一个指针,一定要malloc才可以使用,不然就是野指针,无法使用?
#include<stdio.h>#include<string.h>#include<stdlib.h>int main(){ char *p=NULL;// p=(char *)malloc(sizeof(p)); //注明此处没有申请内存,野指针,会出现内存泄漏。 strcpy(p,"abc"); printf("%s\n",p); ...原创 2018-07-03 23:04:11 · 3264 阅读 · 1 评论 -
工作中遇到的问题,字符串的详解!
一个字符串以反斜杠0结尾,字符串遇到'/0'就会结束。char a[100]={0};这个数组可以放99个字符和一个'\0';#include<stdio.h>#include<string.h>int main(){ char a[100]={0}; char *b="abcdefghijklmnopq"; a=b;// strc...原创 2018-07-03 23:21:50 · 314 阅读 · 0 评论 -
二维数组的详解 :
二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有“缝隙”。要用数组指针来操作二维数组。int (*p)[4]=a; //p每移动一次就是移动了一个一维数组。 指针数组:int *p=a[4]; int *p([4]);以下面的二维数组 a 为例:int a[3][4] = { {0, 1, 2...原创 2018-07-24 00:17:47 · 8234 阅读 · 0 评论 -
C语言中32个关键字
一、C语言的关键字共有32个,根据关键字的作用,可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。 1 数据类型关键字(12个):(1) char :声明字符型变量或函数 (2) double :声明双精度变量或函数 (3) enum :声明枚举类型 (4) float:声明浮点型变量或函数 (5) int: 声明整型变量或函原创 2018-01-20 14:40:57 · 435 阅读 · 0 评论 -
C/C++中static的作用:
这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用:1)修饰局部变量:在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变(该变量存放在静态变量区)。就是说会局部变量会保存上一次赋的值2) 修饰全局变量:在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。注意,只有在定义了变量后...转载 2018-02-08 00:26:50 · 267 阅读 · 0 评论 -
如何去掉字符串开头的0和结尾的0?
去掉一个字符串首尾的0#include#includeint main(){ int i=0,j=0,k=0,z=0; char aa[10]; printf("please input a string!\n"); gets(aa); k=strlen(aa); z=k-1原创 2017-12-26 17:23:50 · 8432 阅读 · 0 评论 -
用函数实现strcat和strncat的功能
1.用函数实现strcat的功能#includechar *strcat(char *str1,char *str2){ char *pt=str1; while(*str1!='\0') str1++; while(*str2!='\0') *str1++=*str2++; *str1='\0'; return pt;}原创 2017-12-26 17:32:26 · 536 阅读 · 0 评论 -
华为笔试机试题,如何判断一个IP地址是否合法?
题目:判断输入的字符串是不是一个有效的IP地址详细描述:请实现如下接口 boolisIPAddressValid(constchar* pszIPAddr) 输入:pszIPAddr 字符串 输出:true 有效的IP地址,false,无效的IP地址约束输入IP为XXX.XXX.XXX.XXX格式 字符串两端含有空格认为是合法IP 字符串中间含有原创 2017-12-27 14:43:51 · 1181 阅读 · 0 评论 -
二级指针的详解:
二级指针:1.定义:数组名其实就是一个指针常量,保存数组的首地址,数组名是一个指针常量,不能修改它指向的值,因此可以当做一个指针变量指向数组,这样数组名加下标可以访问数组中的元素,使用指针名加下标也可以访问数组中的元素,数组名就是指针,指针也可以当做数组名来使用。 用二级指针指向一级指针的地址,一级指针指向的是个数组,就可以用二级指针来操作数组。原创 2018-01-12 18:19:26 · 786 阅读 · 0 评论 -
用指针交换值和交换地址的区别
指针的理解:内存是我们程序运行时候数据暂存的地方,内存是有大小的,我们可以把内存想象成一个连在一起的房间,每个房间都有自己的房间号,这个房间号就是我们内存中每个字节的“地址“,我们可以根据这个房间号来找到我们所住的房间,我们也可以根据这个地址来找到我们所使用的字节。内存是宝贵的,所以我们要灵活的使用指针。例子1: #includeint swap(int x,in原创 2018-01-15 09:47:03 · 10554 阅读 · 0 评论 -
递归的详解:
递归的定义:在函数或子过程的内部,直接或者间接地调用自己的算法。 注明:1.在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。原创 2018-01-15 20:12:38 · 193 阅读 · 0 评论 -
数组指针和指针数组的详解:
指针数组:它是一个数组,数组里面存放的是指针,类型是任意的。 int *a[3] 数组指针:它是一个指针,指针指向的是数组。 int (*a)[3]如何区分:有小扩号的是指针,括号的优先级高。原创 2018-01-25 15:41:30 · 212 阅读 · 0 评论 -
函数指针和指针函数
指针函数:是一个函数,返回值是个指针,定义形式:int *fun(int x,int y) 类型标识符 *函数名(参数表) int *f(x,y);原创 2018-01-25 16:00:54 · 160 阅读 · 0 评论 -
函数式的宏定义和普通函数的区别
去华为面试,被问到了这个问题,答了其中一条,面试官很不满意,回来总结下! 函数式的宏定义: #define MAX(a,b) ((a)>(b))?(a):(b)原创 2018-01-17 17:23:22 · 914 阅读 · 0 评论 -
数据结构之快速排序算法详解
快速排序算法原理: 快速排序:1.就是把数组中的第一个元素做基准,然后从数组的左边和右边开始和这个基准比较,从最右边开始假设下边为high,当遍历到比这个基准小的数的时候则停止,开始从左王右遍历比较,low的元素比基准大的时候,则停止,将Low的元素和high的元素互换,再继续从右往左遍历和基准比较,一直到high和low 相等,则把low的元素给基准,原创 2018-01-17 17:41:48 · 675 阅读 · 0 评论 -
extern的详解
extern 的用法: 1.extern一般放在函数名前或者变量前起声明作用,以提示函数或者变量的定义在别的文件中,提示编译器遇到此变量和函数时去其他模块寻找定义。 2.extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是原创 2018-01-17 20:12:29 · 1023 阅读 · 0 评论 -
32位机器和64位机器各类型的长度对比
1.Linux下查看系统位数的指令: getconf LONG_BIT原创 2018-01-09 18:16:53 · 2376 阅读 · 0 评论 -
Volatile关键字的详解
1.volatile:变量如果加了 volatile 修饰,则不管修改多少次,每次调用改的时候都会从内存重新装载内容,而不是直接从寄存器拷贝内容。原创 2018-01-18 15:07:55 · 178 阅读 · 0 评论 -
void 和void*的详解
void和void*的详解:void指该数据无类型,void*指该指针无类型,可以指向任意类型 1. 如果函数没有返回值,那么应声明为void类型; 2. 如果函数无参数,那么应声明其参数为void; 3. 如果函数的参数可以是任意类型指针,那么应声明其参数为void * ; 4. void不能代表一个真实的变量;原创 2018-01-19 15:04:16 · 449 阅读 · 0 评论 -
初步makefile的详解:
makefile的规则:目标文件 : 依赖文件 //根据依赖文件生成目标文件 command(任意的shell命令) //此处一定要有一个Tab;clean : rm -rf //此处删除生成的文件,以便于下一次重新编译。此处也要有Tab键。举个例子:print.h 文件#include<stdio.h&g...原创 2018-07-25 23:22:49 · 252 阅读 · 0 评论