C
懒羊羊爱大便
这个作者很懒,什么都没留下…
展开
-
C语言基础内存区,原码反码补码
C内存: 栈:局部变量、函数形参 由编译器管理(函数结束,内存释放) 堆: malloc 开辟空间 free 释放空间 由程序员管理 全局区/静态存储区: 全局变量和静态变量 编译器管理: 程序结束,内存释放 常量区:存储常量 编译器管理 代码区:存放编写的代码 编译器管理一般全局静态区和常量区都是放在一起的----------bit 比特byte 字节 = ...原创 2018-06-21 15:09:23 · 300 阅读 · 0 评论 -
C/C++一般链表和通用链表解析
第一种传统链表struct List{ char *data; List *Next;};在自己里面包含next引用 ,下面是创建和遍历List& CreateNode( char *data,List *next){ List *node = (List *)malloc(sizeof(List)); int len = strlen(data) + 1; node-&g...原创 2018-06-23 10:58:27 · 3083 阅读 · 0 评论 -
C/C++中的深拷贝浅拷贝问题
出现深拷贝浅拷贝问题的原因先提前说明: 一个类或结构体中有指针,由于一个类或者结构体拷贝另外一个类或者结构体,使用了 Peroson p1 = p2; 或者 p1 = p2; 使用了系统默认的拷贝构造函数和等号操作符,这两个方法是使用的值拷贝,将两个对象的指针都指向了一块空间,一个对象释放空间后,另外一个对象再次释放,会导致程序崩掉看不懂没关系,接下来我用几个例子来解释class Perso...原创 2018-06-23 10:07:40 · 688 阅读 · 0 评论 -
C语言多维数组,结构体解析
首先讲解一个误区int a[5] = {0};printf("a : %d\n", a);printf("&a : %d\n", &a);printf("a+1 :%d\n", a + 1);printf("&a+1 :%d\n", &a + 1);我们都知道a代表数组的首地址,&a也是数组的地址,所以它们输出的结果是一样的,那么为什么a+原创 2018-06-22 20:54:10 · 5213 阅读 · 0 评论 -
C语言内存四区
常量区一般是算在全局静态区,常量区的内容是不能更改的,举个例子所以一定要注意这个问题,否则很容易会让程序挂掉全局静态区全局变量和所有的静态变量都在这个区内,很好理解栈区一般我们定义的变量,只要不是malloc 或者 new 出来的都在栈区,栈区的容量很小,如果在栈区存的东西过多会导致栈溢出堆区c语言使用的是malloc ,calloc,relloc 切记:使用完后要即使free 否则会造成内存...原创 2018-06-22 14:20:44 · 160 阅读 · 0 评论 -
C语言指针详解
指针变量类似于 int *p; char *p 或者自定义类型的 Person *p; Struct *p这些都是基本的指针变量,不管什么类型的指针变量都是一个存地址的变量,所以它们的大小都是四个字节还有一种void *p 类型,类似于 js 或者 c# 的 var 可以传入任何类型变量的地址,也可以转换成任何类型变量的地址,这个在后面会很有用常量指针,指针常量首先明白:指针和指针指向的内...原创 2018-06-22 11:10:12 · 187 阅读 · 0 评论 -
C语言 通过指针强转巧用指针类型不匹配
这张图片是我之前博客说的大小端对齐,用此来查看数据在内存的显示。如果我们使用char 的指针来指向 int 类型int a = 0x12345678;char *p1 = (char *)&a;printf("%x\n", *p1);printf("%x\n", *(p1 + 1));printf("%x\n", *(p1 + 2));printf("%x\n", *(p1 + ...原创 2018-06-21 16:45:18 · 1316 阅读 · 4 评论 -
C语言 空指针和野指针
int *p1 = NULL;//空指针int *p2;//野指针指向空的指针是空指针,指向一块未知区域的指针是野指针例如 int *p = 0x123456; 这就是一个野指针,我们并不知道这个地址存的是什么内容注意下面的例子void freePoint(int *&p){ free(p); //注意 释放指针后, 一定要将指针指向NULL //否则p指向的空间是未知...原创 2018-06-21 16:21:32 · 1997 阅读 · 0 评论 -
C string api函数解析
Title -------字符串是内存中连续的char空间 以"\0" 结尾 1.strlen 求字符串长度,真实长度,返回值是 size_t 此类型的unsigned int2.strcatr 将两个字符串合并放入第一个参数里面,如果第一个字符串不足以放入两个字符串则会发生溢出报错3.strncat 可以限定追加...原创 2018-06-21 16:12:03 · 562 阅读 · 0 评论 -
C语言剖析各个数据类型的范围,整数溢出及转换
基础为上一篇博客的的原码反码补码------------首先附上各个数据类型的大小:类型前还可以加上long , short 等修饰符先不讨论用char来举例子:一篇大神对char范围分析的博客整数溢出计算一个整数的时候超过整数能够容纳的最大单位后,整数会溢出,溢出的结果是高位舍弃short 的最大为 0xffff 如果在加1原来abc 为 1111 1111 1111 1111 加1后成了 1...原创 2018-06-21 15:57:32 · 736 阅读 · 0 评论 -
C/C++ 大端小端对齐
内存存储是按照byte来存储的 int占4个字节 上面的十六进制12345678 在arm/intel处理器里面是小端对齐,意思是先存入的放在后面但是unix服务器的cpu 则是大端对齐 先存的放在前面 ...原创 2018-06-21 16:03:19 · 538 阅读 · 0 评论