C深入笔记

  • 条件编译
#ifndef DEF


#endif
  • typedef 作用取别名。

  • 内存四区:

    • 栈区(heap)(编译器自动分配释放)、
    • 堆区(stack)(程序员分配释放)、
    • 全局区(global)或常量区、
    • 代码区(code)(操作系统分配)
  • 主调函数的所有内存区的数据都可已在被调函数中使用。

  • 内存四区模型&函数调用模型

    • 函数内元素
      • 深入理解数据类型和变量“内存”属性
      • 一级指针内存布局图(int , char )
      • 二级指针内存布局图(int , char )
    • 函数间接
      • 主调函数分配内存,还是被调函数分配内存
      • 主调函数如何使用被调函数分配的内存(技术关键点:指针做函数参数),被调函数只能返回堆区、全局区的数据·
  • 形参以也是被调用该函数的参数,具有对外的属性

  • 字面量不能 & ,如 10, “abcs”,不在堆区、栈区、全局区、可以按照放在代码区区域内即可。

  • 看函数应该站在内存四区的方式看。

  • while((*p1++ = *p2++) != ‘\0’);将p2所指的字符串赋值为p2所指的空间。
    具体代码:

        char *a = (char *)malloc(sizeof(char) * 10);
        char *b = (char *)malloc(sizeof(char) * 10);
        char *a1 = a;
        char *b1 = b;

        *a = 'a';
        *(a + 1) = 'b';
        *(a + 2) = 'c';
        *(a + 3) = 'd';
        *(a + 4) = 'e';
        *(a + 5) = '\0';

        *b = '1';
        *(b + 1) = '2';
        *(b + 2) = '3';
        *(b + 3) = '4';
        *(b + 4) = '5';
        *(b + 5) = '\0';

        printf("%c\n",*b1++ = *a1++);
        printf("*a1 = %c, *b1 = %c\n",*a1,*b1 );
        printf("a[] = %s, b[] = %s\n",a,b);
        free(a);
        free(b);
  • 位运算交换两个数,该交换方式不会产生溢出
a ^= b;  
b ^= a;  
a ^= b; 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值