c/c++ & 编译原理
c
車輪の唄
atarik@163.com
展开
-
结构体和类的区别
区别:1.结构体是一种值类型,而类是引用类型。值类型用于存储数据的值,引用类型用于存储对实际数据的引用。那么结构体就是当成值来使用的,类则通过引用来对实际数据操作。2.结构使用栈存储(Stack Allocation),而类使用堆存储(Heap Allocation)栈的空间相对较小.但是存储在栈中的数据访问效率相对较高.堆的空间相对较大.但是存储在堆中的数据的访问效率相对较低...原创 2019-12-10 17:34:38 · 8591 阅读 · 1 评论 -
共用体union
当多个数据须要共享内存或者多个数据每次仅仅取其一时。能够利用联合体(union)。在C Programming Language 一书中对于联合体是这么描写叙述的: 1)联合体是一个结构; 2)它的全部成员相对于基地址的偏移量都为0; 3)此结构空间要大到足够容纳最"宽"的成员;4)其对齐方式要适合当中全部的成员;以下解释这四条描写叙述:...原创 2017-07-21 09:22:16 · 799 阅读 · 0 评论 -
realloc
只能重新分配堆内存, 如果是一个栈内存则无法使用该函数, 换言之其只能处理使用malloc或者calloc分配的内存char* p = malloc(1024);char* q = realloc(p,2048);1.如果 当前连续内存块足够 realloc 的话,只是将p所指向的空间扩大,并返回p的指针地址。 这个时候 q 和 p 指向的地址是一样的。2.如果 当前连续内存块不够长...原创 2019-07-06 14:29:55 · 779 阅读 · 0 评论 -
数组指针和指针数组
指针数组(数组中的元素是指针变量)定义 int *p[n];[]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素,这样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *p=a; 这里*p表示指针...原创 2019-07-05 09:55:26 · 232 阅读 · 0 评论 -
函数指针与typedef
通过下面这个例子,我们看看 typedef 是怎么搭配函数指针使用的吧。int add(int a, int b) { return a + b;} typedef int (PTypeFun1)(int, int); // 声明一个函数类型typedef int (*PTypeFun2)(int, int); // 声明一个函数指针类型int (*padd)(int, i...原创 2019-07-04 16:58:48 · 319 阅读 · 0 评论 -
java和c中的static关键字
(一)首先来谈谈在C中的作用,分为修饰变量和修饰函数两种情况:(1)修饰变量,变量分为局部静态变量和全局静态变量,他们都存在内存的静态区,静态全局变量的作用域仅限于变量被定义的文件中,准确的说:是从定义之处开始,到文件结尾处结束。静态局部变量,就是函数体里面定义的,就只能在这个函数里用了,同一个文档中的其他函数都不能用。由于被static修饰的变量总是存在内存的静态区,所以即使这个函数运行结束...原创 2019-07-13 09:30:03 · 215 阅读 · 0 评论 -
二级指针
void test19() { long **p = NULL; long l[] = {11, 12}; *p = &l;// crash, 因为二级指针汇总不允许直接操作一级指针}/** * 对比test19(),定义的二级指针**p后, 是不能直接操作*p */void test20(){ long **p = NULL; lo...原创 2019-07-08 22:51:27 · 166 阅读 · 0 评论 -
Clion开发调试Makefile项目
1. 安装makefile插件, 安装库文件 pip install compiledb2.单机makefile文件,右键run 'makefile', 会编译生成很多相应文件, 控制太没有报错即可3.在项目根目录新建CMakeLists.txt文件,并填写如下内容,点击Load CMake projectcmake_minimum_required(VERSION 3.4.1)...原创 2019-07-03 11:53:08 · 4825 阅读 · 0 评论 -
宏函数
使用宏函数的优点有两个适用于任何实现了operator<的类型,包括自定义类型; 效率最高。虽然使用inline提示符也将函数或模板定义为内联的,但这只是一种提示而已,到底编译器有没有优化还依赖于编译器的实现,而使用宏函数则是完全由代码本身控制。宏函数是包括在do{…}while(0)内的原因考虑下面一个特殊的例子。宏函数的定义如下:#define test(x) \...原创 2019-07-08 14:34:49 · 410 阅读 · 0 评论 -
结构体的浅拷贝与深拷贝
浅拷贝首先看下面这段代码:# include<assert.h># include<string.h>#include <stdlib.h>typedef struct Node//定义了一个结构体{ int size; char *data;}S_Node;int main(){ S_Node node1; ...原创 2019-02-23 22:38:20 · 261 阅读 · 0 评论 -
结构体里的成员数组和成员指针
struct test{ int i; char *p;};struct test *str; int a = 1; char *b = "ioiodddddddddddd"; str = (struct test *)malloc(sizeof(struct test));//结构体指针不为null str->i = a;...原创 2019-02-23 21:50:13 · 4621 阅读 · 0 评论 -
计算一个结构体内成员地址的偏移量的两种方法
一、有时候需要需要看一下一个结构体内成员地址的偏移量,下面介绍两种实现方法。二、实现方法。1、方法一,包含头文件#include <stddef.h>,调用函数offsetof(struct s, i)来实现。2、方法二,使用&(((s1*)0)->i)的形式。三、实例测试。1、c代码 #include <stddef.h>...原创 2019-02-23 21:10:35 · 1451 阅读 · 0 评论 -
struct字节对齐问题
要判断一个结构体所占的空间大小,大体来说分三步走:1.先确定实际对齐单位,其由以下三个因素决定 1> CPU周期 WIN vs qt 默认8字节对齐 Linux 32位 默认4字节对齐,64位默认8字节对齐 2> 结构体最大成员(基本数据类型变量) 3> 预编译指令#pragma pack(n)手动设置 n--只...原创 2019-02-18 16:55:03 · 280 阅读 · 0 评论 -
void指针
void指针的基本概念void的意思就是“无类型”,void指针则为“无类型指针”,void指针可以指向任何类型的数据。所以void指针一般被称为通用指针或者泛指针,或者叫做万能指针定义形式 : void *p;**在C语言中在任何时候都可以用void类型的指针来代替其他类型的指针,void指针可以指向任何数据类型的变量****如果要通过void指针去获取它所指向的变量值时候,需要...原创 2019-02-18 18:54:21 · 327 阅读 · 0 评论 -
字符指针, 字符数组, 字符串
预备知识: C程序在内存中的空间占用分配(1)代码区:存放程序代码;(2)数据区a.静态数据区: 在编译器进行编译的时候就为该变量分配的内存,即全局变量和静态变量(用static声明的变量),存放在这个区的数据程序全部执行结束后系统自动释放,声明周期贯穿于整个程序执行过程。全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域(.data),未初始化的全局变量...原创 2019-02-19 14:23:59 · 781 阅读 · 1 评论 -
C中基本数据类型所占内存大小
c中的数据类型C中不同数据类型所占的字节大小,在不同的操作系统和编译器下,是不同的,一般主要说gcc下,32位或64位系统的,蓝色部分是32和64位系统不同的,表如下:注意: 1. 求数组大小时,如果数组作为参数传递时,退化为指针,所以sizeof(arr)大小为该系统下指针的大小 2. 对于C字符串,需要牢记C/C++中一个汉字占两个字节(Linux...原创 2019-02-21 16:02:57 · 984 阅读 · 0 评论 -
c柔性数组
一 , 定义C99及以上标准支持标准示例如下:typedef struct st_type{int i;int a[];}type_a;初始大小为sizeof(i),0个元素的数组没有占用空间,而后我们可以进行变长操作了。通过如下表达式给结构体分配内存:type_a *p = (type_a*)malloc(sizeof(type_a)+100*sizeof(int))...原创 2019-02-22 11:08:20 · 203 阅读 · 0 评论 -
数组和指针的区别
一.指针与数组的联系:指针与数组是C语言中很重要的两个概念,它们之间有着密切的关系,利用这种关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之间的联系及在编程中的应用。1.指针与数组的关系 当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。如:char str[20], *ptr;ptr=str; ptr被置为数组str的第一个元素的地址,...原创 2019-02-23 20:39:11 · 16160 阅读 · 2 评论