
C
未名湖畔的落叶
圆月照方窗,有规有矩。长竿垂短钓,能屈能伸。
展开
-
预处理器标识#error的目的是什么
# 空指令,无任何效果 #include 包含一个源代码文件 #define 定义宏 #undef 取消已定义的宏 #if 如果给定条件为真,则编译下面代码 #ifdef 如果宏已经定义,则编译下面代码 #ifndef 如果宏没有定义,则编译下面代码 #elif 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码 #endif 结束一个#if……#else原创 2013-09-28 23:53:16 · 1996 阅读 · 0 评论 -
堆与栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(转载 2013-10-26 20:49:14 · 648 阅读 · 0 评论 -
结构体对齐详解
1 -- 结构体数据成员对齐的意义许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的起始地址的值是某个数k的倍数,这就是所谓的内存对齐,而这个k则被称为该数据类型的对齐模数(alignment modulus)。这种强制的要求一来简化了处理器与内存之间传输系统的设计,二来可以提升读取数据的速度。比如这么一种处理器,它每次读写内存的时候都从某个8倍数的地址开始,一次转载 2013-09-10 21:17:04 · 579 阅读 · 3 评论 -
define与typedef的区别
define与typedef在C语言中都有重新定义一个变量的功能,但是如何区分两者的差别呢,看下面几行代码: #define p char * #typedef char * a p m1,m2; a n1,n2;上面的例子中m1为char *类型,但是m2就为char型;n1,n2都为char *型。由此可见,define仅为替换而已,而typede原创 2013-04-13 09:52:19 · 650 阅读 · 0 评论 -
计算一个32字节的数据中,有多少个1
解析:int型数据正好为32位,可直接计算int转化为二进制后1的个数。#include "stdafx.h"int main(int argc, char* argv[]){int t;int i;int count=0;printf("Please input the num:");scanf("%d",&t);for(i=0;i{if(原创 2014-03-14 22:18:47 · 2023 阅读 · 0 评论 -
指针与数组的区别于联系
1.把数组作为参数传递的时候,会退化为指针数组名作为函数形参时,在函数体内,其失去了本身的内涵,仅仅只是一个指针; 很遗憾,在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。 所以,数据名作为函数形参时,其全面沦落为一个普通指针!它的贵族身份被剥夺,成了一个地地道道的只拥有4个字节的平民。 典型的情况是void func(int A[])转载 2013-12-03 15:18:28 · 648 阅读 · 0 评论 -
数据段、代码段、堆栈段、BSS段的区别
进程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过进程对这些内存的管理方式因内存用途 不一而不尽相同,有些内存是事先静态分配和统一回收的,而有些却是按需要动态分配和回收的。对任何一个普通进程来讲,它都会涉及到5种不同的数据段。Linux进程的五个段下面我们来简单归纳一下进程对应的内存空间中所包含的5种不同的数据区都是干什么的。转载 2013-11-21 17:54:22 · 962 阅读 · 0 评论 -
C语言中volatile关键字的作用
一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的方法有:转载 2013-11-21 11:16:19 · 972 阅读 · 1 评论 -
C语言中内存操作函数
一、malloc/calloc名称:Malloc/calloc功能: 动态内存分配函数头文件:#include 函数原形:void *malloc(size_t size);void *calloc(size_t num,size_t size);转载 2013-11-21 11:13:35 · 889 阅读 · 0 评论 -
结构体与联合体的区别
共用体构造数据类型,也叫联合体用途:使几个不同类型的变量共占一段内存(相互覆盖)结构体是一种构造数据类型用途:把不同类型的数据组合成一个整体-------自定义数据类型---------------------------------------------------------------结构体变量所占内存长度是各成员占的内存长度的总和。共同体变量所占内存长度是各最转载 2013-11-21 10:39:13 · 3040 阅读 · 0 评论 -
strcpy、strlen函数
strcpy():char *strcpy(char * strDest,const char* strSrc){ assert((strDest!=NULL)&&(strSrc!=NULL)); char * address=*srcDest; while((*strDest++=*strSrc**)!=‘\0’);原创 2013-10-22 15:47:34 · 814 阅读 · 0 评论 -
大端模式、小端模式的检测:C
请写一个C 函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1解答:int checkCPU(){ unionw { int a; char b; } c; c.a = 0x1; return (c.b == 1); //小端则前八位为000原创 2013-10-22 18:39:35 · 784 阅读 · 0 评论 -
位操作(设置、清除)
嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a的bit 3。在以上两个操作中,要保持其它位不变。解答: #define BIT3 (0x1 static int a; void set_bit3(void) { a |= BIT3; } v原创 2013-10-22 09:41:27 · 1761 阅读 · 0 评论 -
const关键字
const关键字的N个作用: (1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了; (2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const; (3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数原创 2013-10-22 15:02:08 · 675 阅读 · 0 评论 -
内存访问
嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。解答: 方法一:*(int * const)(0X67a9)=0Xaa66; 方法二:int *ptr; ptr = (int *)0x67a9;原创 2013-10-22 09:53:12 · 778 阅读 · 0 评论 -
链表的创建、取长、输出、插入、删除、逆序
#include "stdio.h"typedef struct node{ intdata; structnode *next;}link; link * creatLink(){ link*p,*s,*head; head= (link*)malloc(sizeof(link));转载 2013-10-25 09:24:14 · 707 阅读 · 0 评论 -
单链表查找倒数第K个节点
写一个函数,输出单链表的倒是第K个节点。思路分析:方法一:用两个指针,p1和p2,p1先将链表遍历一遍,得到链表的长度length,然后二者一起走,当p1指向length-k-1的时候,p2指向的就是倒数第k个节点。node *search(node *head,int k) { int length=0; node *p=head;原创 2013-10-25 20:03:40 · 2820 阅读 · 0 评论 -
引用与指针的区别
从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量)。在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传转载 2013-11-21 08:59:11 · 813 阅读 · 0 评论