标准C语言关键知识回顾

指针的长度

1. 如果系统是32位则,指针变量为4个字节;如果系统是64位系统,指针变量为8个字节。

2. 指针常量和常量指针的区别:

2.1 指针常量 int const * p; 指向的地址可变,其指向地址的内容不可变。const int *p等价
    ```
    例子:
    int a = 10;
    int b = 11;
    int const *p = &a;
    p = &b;  //指向的地址可变
    *p  = 99 ; //错误,其指向地址的内容不可变 
    ```
2.2 常量指针 int * const p; 指向地址不可变,但指向地址的内容可变。
   ```
   例子:
   int a = 10;
   int b = 11;
   int *const p = &a;
   p = &b;//错误,指向地址不可变
   *p = 88;//指向地址的内容可变。
   ```

3. 动态内存分配——堆的申请:

3.1 malloc(n * sizeof(int))

 请求n个连续的、每个长度是一个int大小的空间,如果创建成功,返回这些空间的地址;如果创建失败,返回 0;

3.2 calloc(n, sizeof(int))

 请求n个连续的、每个长度是一个int大小的空间,如果创建成功,返回这些空间的地址;如果创建失败,返回 0.
 和 malloc() 的区别在于, calloc() 会自动把空间初始化为 0;

3.3 realloc(p, sizeof(int) * n)

 给一个已经分配了地址的指针p重新分配空间,参数p 是原来的空间首地址,sizeof(int) * n 是重新申请地址长度
 主要用于原来的空间大小的不够啦,要重新分配。

4. 指针配合堆的使用注意事项

4.1 指针要指向一块内存地址

   ```
   char * p;
   strcpy(p,"aaaa");//错误,因为p未指向一块内存地址

    char *kk = malloc(10);
    strcpy(p,"aaaa");//正确
   ```

4.2 使用指针时,读操作,只把地址传过去就可以解决;但是写操作,需要让指针指向一块可写的内存,除去常量区,可参考4.1

      ```
      char *p = "abdfdsafasdf";
      printf("%s",p);

      ```

5. static 变量:

5.1 局部静态变量: 就在函数中定义,生命周期是整个源程序,但是作用域和自动变量没区别,都是只能在定义该变量的函数范围内使用,退出该函数后,尽管这个变量还在,但是已经不能使用。
5.2 全局静态变量: 全局变量本身就是静态存储的,静态全局变量也是静态存储方式,但是有区别:
5.2.1 非静态全局变量:变量的作用域是整个源程序,但是其他源文件也可以使用,
5.2.2. 静态全局变量:会限制作用域范围,只能在定义该变量的源文件内有效,在其他源文件内不能使用。
5.3 static 函数(也叫 内部函数):

只能被本文件中的函数调用,不能被同意源程序的其他文件中的函数调用,区别一般的非静态函数(外部函数),

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值