摘要:如果两个指针指向同一个数组,它们就可以相减,其结果为两个指针之间的元素数目。int array[2]={0,1};int *p =&array[0];int *q =&array[1];q-p=1//等于1 而不是等于4 p++是值加上了4个值;(int)p-(int)q=4//看好了 是int 不是int*上面这种减法一般这么写((int)p-(int)q)/sizeof(type)
阅读全文
摘要:宏定义中的## 连接符与# 符## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。具体的定义在编译原理里有详尽的解释,但不知道也无所谓。同时值得注意的是#符是把传递过来的参数当成字符串进行替代。下面来看看它们是怎样工作的。这是MSDN上的一个例子。假设程序中已经定义了这样一个带参数的宏:#define paster( n ) printf( "token" #n " = %d", token##n )
阅读全文
摘要:可以用localtime函数分别获取年月日时分秒的数值。 Linux下获得系统时间的C语言的实现方法: 1.可以用localtime函数分别获取年月日时分秒的数值。 #include<time.h>//C语言的头文件 #include<stdio.h>//C语言的I/O voidmain() { time_tnow;//实例化time_t结构 structtm*timenow;//实例化tm结构指针 time(&now); //time函数读取现在的时间(国际标准时间非北京时间),然后传值给now timenow=localtime(&now); //l
阅读全文
摘要:6.3.3 二维数组在形式上很像一个矩阵或者一个二维的表格,例如:int a[2][3];可以把二维数组a的所有元素放在一个二维表中:a[0][0] a[0][1] a[0][2]a[1][0] a[1][1] a[1][2]二维数组在定义后,同样系统会为它申请内存。如果是一个m*n的二维数组,需要申请m*n的内存单元,每个内存单元所需的字节数取决于二维数组的类型。例如上述的二维数组a,因为int型变量占用2个字节(Turbo C环境),那么a数组需要2*3*2=12个字节的内存。C语言规定:二维数组元素在内存中顺序排放,排列顺序是按行存放。即先顺序存放第一行的数组元素,然后存放第二行的数组元
阅读全文
摘要:简介 restrict是c99标准引入的,它只可以用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式.即它告诉编译器,所有修改该指针所指向内存中内容的操作都必须通过该指针来修改,而不能通过其它途径(其它变量或指针)来修改;这样做的好处是,能帮助编译器进行更好的优化代码,生成更有效率的汇编代码.如 int *restrict ptr, ptr 指向的内存单元只能被 ptr 访问到,任何同样指向这个内存单元的其他指针都是未定义的,直白点就是无效指针。restrict 的出现是因为 C 语言本身固有的缺陷,C 程序员应当主动地规避这个缺陷,而编译器也会很配合地优化你的代码.例子 ..
阅读全文
摘要:一般把(void*)0定义为NULL表示这是个空指针void的含义void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。众所周知,如果指针p1和p2的类型相同,那么我们可以直接在p1和p2间互相赋值;如果p1和p2指向不同的数据类型,则必须使用强制类型转换运算符把赋值运算符右边的指针类型转换为左边指针的类型。例如:float *p1;int *p2;p1 = p2;其中p1 = p2语句会编译出错,提示“'=' : cannot convert from 'int *' to 'float *'”,必
阅读全文
摘要:最近学数据结构老是做实验常用到字符串和数字的转换想找却发现网上的资料太散所以搜集整理一下 方便以后再用atof(将字符串转换成浮点型数)atoi(将字符串转换成整型数)atol(将字符串转换成长整型数)strtod(将字符串转换成浮点数)strtol(将字符串转换成长整型数)strtoul(将字符串转换成无符号长整型数)toascii(将整型数转换成合法的ASCII 码字符)toupper(将小写字母转换成大写字母)tolower(将大写字母转换成小写字母) atof(将字符串转换成浮点型数)相关函数 atoi,atol,strtod,strtol,strtoul表头文件 #include &
阅读全文
摘要:一、 1、类型不同 BOOL为int型 bool为布尔型 2、长度不同 bool只有一个字节 BOOL长度视实际环境来定,一般可认为是4个字节 3、取值不同 bool取值false和true,是0和1的区别 BOOL取值FALSE和TRUE,是0和非0的区别 二: bool是标准C++数据类型,可取值true和false。单独占一个字节, 如果数个bool对象列在一起,可能会各占一个bit,这取决于编译器。 BOOL是微软定义的typedef int BOOL。与bool不同,它是一个三值逻辑, TRUE/FALSE/ERROR,返回值为>0的整数为TRUE,0为FALSE,-1为ERR
阅读全文
摘要:今天刚知道的一个函数 !在写一个小东西的时候 做了一个DOS下的 界面 没有清屏 看起来好乱所以 问了下 得到这个函数system("cls");
阅读全文
摘要:int a[3]="===";//是错误的 因为字符串的末尾为\0 申请空间不够int a[3]={'a','b','c'};//是正确的 因为这种 装载的方法 装的是一个个的字符 不是字符串的形式!后面也没有\0 没有益处情况出现
阅读全文
摘要:①const 一般修饰 的变量为只读变量 const定义应该为在定义的时候初始化 以后不能改变他的值例:const int a=1;//只能在定义的时候初始化; a=2;//出现错误 因为a为只读变量②const 修饰一些指针时候的用法int a;const int *p=&a;// *p是不允许改变的 但是P是允许改变的int * const p1 //定义了一个只读的变量P1 ;P1不可以改变 *P1是可以改变的因为是自己在学习过程中 看到的比较有意思的东西所以记录下来 如果有理解错误的地方 请大家改正!留言给我!
阅读全文
摘要:1.标准3部曲:malloc + free +指针置空2.编程实例/*date:20100824description:malloc使用规范探讨in参数:申请的堆内存字节数,注意int,short,float需要自己乘上相应字节数。out返回值:void **/main(){char *str=NULL;str=(char *)malloc(10); //注意malloc返回值是void *,申请时需要强制转换成需要的类型memset(str,0,10);//如果不清空,申请的区域值是随机的,养成好习惯strcpy(str,"happylife"); //使用strcpy特别注意拷贝的字符串长
阅读全文