C语言
e_Zkz
这个作者很懒,什么都没留下…
展开
-
指针
记住:在C中,指针和其它基本类型一样,是分类型的,根据类型不同,操作会迥异。如 int *ip; float *fp;ip++; fp++;每次增加的地址数不同。 也有无类型的指针 void * ptr,这时就不能对ptr进行加量或减量。如:ptr++指向函数的指针int (*min)();函数的指针可以忽略函数的参数,也可以原创 2008-08-22 09:55:00 · 561 阅读 · 0 评论 -
sizeof
sizeof是返回类型的字节数,当类型是指针时,32位机返回4字节,不返回指针指向的数据大小。 如: char* string = "abc"; sizefo(string)=4; strlen(string)=3;但 char string[32]="abc";则:sizeof(string)=32;sizeof((char*) string原创 2008-08-22 10:02:00 · 553 阅读 · 0 评论 -
C的结构
在内存中,结构不一定是它表面看起来那么大。typedef struct{char abc[2];int i;} ABC;printf("%d/n",sizeof(ABC));//结果为 8注:具体的大小依赖于编译器的字节对齐情况。有些编译器甚至会调整结构中的成员的排列顺序。 即使空结构,也不会为0字节,可能是避免为零时,空结构的地址就等于紧接它的数据原创 2008-08-22 10:05:00 · 633 阅读 · 0 评论 -
C支持参数可变的函数
例: 当调用函数add_values(10,20,30,0)时,调用的堆栈为:-------------10-------------20-------------30-------------0-------------函数返回地址------------- 可以通过宏va_list、va_start、 va_arg、 va_end 来从原创 2008-08-22 10:10:00 · 596 阅读 · 0 评论 -
C99对于普通C的改变
一、总述c99:粗略描述,并非完整的归纳。 增加部分1.类型,属于关键字布尔 _Bool 头文件 包含更简明的宏bool,当不与原有代码冲突时,建议包含此头文件。复数 _Complex 头文件 包含更简明的宏comlex,当不与原有代码冲突时,建议包含此头文件。虚数 _Imaginary 头文件 包含更简明的宏原创 2008-08-22 10:13:00 · 865 阅读 · 0 评论 -
字节对齐的简单方法
// 此语句用于把地址对齐到cell的整数倍,仅在cell为偶数时正确。(((long)space) + (sizeof(cell) - 1)) & ~(sizeof(cell) - 1) 原理描述:假如一个数为18,cell为四字节,则cell整倍数的下一地址与现有地址相差不超过sizeof(cell)-1,这里的下一地址为20。把一个数加上sizeof(cell)-1,原创 2008-08-22 10:18:00 · 767 阅读 · 0 评论 -
指针采用值传递
在C中,指针采用值传递,就是在传参数时,拷贝形参指针的值给实参指针。 例子:void swap (int *,int *); void main(void){int a=100,b=0;int *pa=&a,*pb=&b;printf("pa = %d,pb = %d/n",pa,pb);swap(pa,pb);printf("pa = %d,pb原创 2008-08-22 10:07:00 · 754 阅读 · 0 评论 -
C比较浮点数
实际上,精确比较浮点数还是可以的。如:void main(void){float a=0.065F;if(a==0.065F)printf("%f",a);}可以输出a的值,只是不太方便罢了,并非如书上所说,由于浮点数不能精确表示0.065F,所以比较一直为假,因为比较表达式中的0.065F也要存入内存中。假如改为a==0.065则为假,因为0.065默原创 2008-08-22 10:08:00 · 752 阅读 · 0 评论 -
传数组参数
多维数组当函数参数,最后几个长度要指定,如:printArray(int [][2][3],length); 一个技巧是把多维数组当一维数组传。如:int a[][2]={1,2,3,4}传给printArray (int [],int) 对数组的取址是多余的,如 a 和 &a 的值相同。数组本身是一个地址的常量值,不是变量int a[],则a是常量。原创 2008-08-22 10:11:00 · 978 阅读 · 0 评论