宏定义

宏定义不管在C还是C++中都经常用到,其用法是个比较神奇的东西,宏定义不表示任何类型,同样也表示任何类型,这也是宏定义的一个优点,宏函数类似C++的函数重载,可以用于任何类型,但不进行类型检查,宏定义实际代表的就是一个字符串,比如下面这段代码#include<iostream>usin...

2016-08-15 09:34:09

阅读数 159

评论数 0

自动类型转换

我们都知道多数编程语言都有类型自动转换的功能,那到底那些类型之间可以自动转换呢,一般主要遵循两点: 1、目标类型与源类型兼容,比如double和int之间2、目标类型大于源类型,比如double占8字节,int占4字节,那么当把一个int类型赋给一个double类型的变量时,int可以自动转换成...

2016-08-10 15:36:58

阅读数 197

评论数 0

主调函数分配内存的两次调用

主调函数中的指针所指向的内存空间可以在当前函数中直接分配,也可以在被调函数中分配,同样可以二次调用被调函数,第一次让被调函数返回一个内存空间的大小,然后在主调函数中根据被调函数返回的空间大小分配内存,第二次调用往主调函数分配的内存空间中写入数据。这也是项目开发过程中会用到的一种内存分配方式,所以在...

2016-08-01 10:37:29

阅读数 705

评论数 0

释放内存出现HEAP CORRUPTION DETECTED错误

今天敲代码,出现了HEAP CORRUPTION DETECTED错误,本来指针分配内存,最后再释放内存空间是天经地义的事情,竟然报错,开始也摸不着头脑,最后百度了一下,最终发现问题是,我分配了len长度的空间,我却用到了len + 1的长度,释放的时候就报错了。贴下我的代码,主要是实现将两种内存...

2016-07-24 10:17:24

阅读数 3222

评论数 0

指针常遇到的问题

指针是个涉及到内存,很容易产生bug的根源,总结了几点指针容易出错的问题:1、对于多级指针,不要在多个函数中分配内存空间,例如:void func(char** p){ for(int i = 0; i < 5; i++){ p[i] = (char*)malloc(...

2016-07-19 10:13:24

阅读数 230

评论数 0

数组、指针数组与数组指针

一、数组类型注意: (1)数组首元素的地址与数组地址是完全两个不同的概念int a[10]; printf("a : %d, a + 1 : %d\n", a, a + 1); printf("&a : %d, &a + 1 : %d\n&quo...

2016-07-19 09:58:18

阅读数 161

评论数 0

二级指针的三种内存模型

char* p1[] = {"123, "456", "789"}; //第一种 char p2[3][4] = {"123, "456", "789"}; //第二种 char **p3 ...

2016-07-17 09:27:33

阅读数 179

评论数 0

字符串的操作

一、字符串的初始化 1、定长字符数组1>char buf1[128] = {'a', 'b', 'c', 'd'}; printf("sizeof(buf1) = %d\n", sizeof(buf1)); //128 printf("strlen(bu...

2016-07-08 23:21:03

阅读数 646

评论数 0

(转)#ifndef 与 #program once 的区别

为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式。在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。 方式一: #ifndef __SOMEFILE_H__ #...

2016-06-30 14:57:13

阅读数 219

评论数 0

指针

铁律1:指针也是一种数据类型一、指针1、指针是一种变量,占有内存空间,用来把保存内存地址。指针的大小在32位平台下是4字节,64位平台下是8字节。2、*p操作内存1> *p放在等号左边,相当于对指向的内存空间赋值。#include"stdio.h" #include&qu...

2016-06-26 12:58:00

阅读数 334

评论数 0

函数调用模型-主调函数与被调函数

一、函数调用模型:返货都是先以返回地址,函数参数,执行状态的顺序依次压栈的,函数执行完毕再从上到下依次弹栈。二、函数调用模型中的内存管理还是以上面那个图为例:1、main函数中,可以在栈区、堆区、全局区开辟空间,这些内存空间都可以在fa和fb函数中使用2、fb函数中,在栈上开辟的内存空间,不能在f...

2016-06-26 10:38:49

阅读数 1601

评论数 0

栈区的地址增长方向与buf地址的增长方向是两个完全不同的概念

一、栈区的地址增长方向要想验证栈区究竟是开口向上还是开口向下,都进行先压变量a再压变量b的操作,若a的首地址比b的首地址大则说明开口向下,若b的首地址比a的首地址大,则说明开口向上,下面就用代码来验证一下:#include"stdio.h" #include"stdl...

2016-06-26 09:50:33

阅读数 1033

评论数 0

内存四区之堆栈区

一、堆区先看一个例子:#include"stdio.h" #include"stdlib.h" #include"string.h"char* getval(int num) { char* p = NULL; p = (...

2016-06-26 08:58:37

阅读数 792

评论数 0

静态存储区的内存四区

一、操作系统是如何执行exe程序的?1、操作系统首先把物理磁盘代码load到内存;2、操作系统把C代码分成四分区;3、操作系统找到main函数入口执行二、内存四区1、栈区:局部变量存放的位置,因为局部变量出了作用域会被析构释放空间,所以也叫临时区;2、堆区:需要手动分配和释放内存的区,由mallo...

2016-06-25 20:07:39

阅读数 1489

评论数 0

C语言之变量的本质

一、变量的本质变量的本质是一段连续内存空间的别名,或者说变量是一段连续内存空间的门牌号,画个图:不管是标准数据类型,还是指针(指针也是一种数据类型),都是一样的,都是内存空间的门牌号,千万不好把变量画到内存中去。二、通过变量往内存中进行读写数据三、修改内存的方法1、直接int a = 10; a ...

2016-06-25 16:42:19

阅读数 1018

评论数 0

C语言之数据类型

1、数据类型是固定内存块大小的别名,也就是说申明变量为一种数据类型就是告诉编译器分配多少内存给我。看这么一段代码:#include"stdio.h" #include"stdlib.h"int main() { int a[10]; //告诉编...

2016-06-25 16:09:54

阅读数 187

评论数 0

C语言之数组做参数退化问题

先来个冒泡排序的简单实现来说明整个问题:#include"stdio.h" #include"stdlib.h"void print(int a[3], int num) { for (int i = 0; i < num; i++) ...

2016-06-25 15:30:11

阅读数 425

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭