最近学习C语言中的精华

来源:互联网 发布:阿里云免费企业邮箱 编辑:程序博客网 时间:2024/05/16 11:52

1.Register变量长度小于等于整形长度,不能用&来获取地址

2.Sizeof在计算变量占用空间大小时括号可以省略,但是计算类型大小时不能省略

#include<stdio.h>

  2 int main()

  3 {

  4     int *p=NULL;

  5     printf("%d\n",sizeof(p));   4

  6     printf("%d\n",sizeof(*p));  4

  7     return 0;

  8 }

 #include<stdio.h>

   int main()

  {

      int a[100];

      printf("%d\n",sizeof(a));     400

      printf("%d\n",sizeof(a[100]));   4

      printf("%d\n",sizeof(&a));      4

      printf("%d\n",sizeof(%a[0]));    4

      return 0;

  }

3.Float 0比较

Iffval>=-epsinon&&fval<=epsinon

Epsinon为定义好的精度

4.case后面只能跟整形或字符型的常量或常量表达式。一般把常用的情况放在最前面

5.For循环嵌套使用时将长循环放在内循环里面,纸样提高算法效率

6.Return不可返回指向“栈内存”的指针,即不能返回局部变量

7.Const 修饰 修饰谁近水楼台先得月

  Const int *p  p可变p指向的对象不可变

  Int *const p   p指向的对象可变,p不可变

8.Volatile 修饰的变量编译器对访问变量的代码不再优化,一般用于定义寄存器变量或者端口数据或者多线程共享数据。

Volatile int i=10

Int j=i

Int k=i

9.#define SEC_A_YEAR (60×60×24×365)UL是表达式时要用括号括起来

10.&a[0]首元素地址;&a数组地址;a数组首元素地址;

  a+1  &a+1  

0x100存放到0x12ff7c

int *p=(int *)0x12ff7c;     地址需进行强制转化。“=”两边数据类型应保持一致

*p=0x100 

11.Extern

   文件1中 char a[100]

文件中声明 extern a[]extern  a[100]

Extern char *a 是不对的,此时a为一个指针变量

12.Int *p1[10]这是一个数组,包含10int类型数据指针

  int (*p)[10]此时p为指向一个诗歌int型元素数组的指针

  ***区分以上不同只需记住[]优先级比*

Int main()

{

Int a[4]={1,2,3,4};

Int *ptr1=(int*)(&a+1);

Int *ptr2=(int*)((int*)a+1);

Printf("%x,%x",ptr1[-1],*ptr2);      4  a[0]第二个字节开始的4B

Return 0;

}

一维数组作为函数参数传递的只是其首元素地址。函数返回时也只是一个指针

二维数组三维数组作参数时 char a[3][4]  fun(char (*p)[4]) 或者fun(char a[][4]) a[3][4][5]作参数时写成(*p)[4][5]  

Char * (*fun) (char *p1,char *p2)  fun为指向返回类型char* 类型的函数的指针

13常见的内存错误、

指针指向位置不合法

(1)结构体成员指针未初始化

(2)结构体成员指针分配内存不足

(3)确保指针有效 为此在函数入口处使用assertNULL=p)对参数进行校验

为指针分配内存小,此时主要指未考虑字符串“\0”结束符

3内存分配成功但未初始化

4内存越界

5内存释放之后将指针指控

Char *p;

P=char * malloc(5*sizeof(char));

If(NULL!=p)验证分配成功

………

Freep);

P=NULL

原创粉丝点击