- 条件编译
#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;