位运算
#include<stdio.h>
int main()
{
// & 与 都是1为1
// | 或 有1为1
// ~ 取反 1变0 0变1
// ^ 异或 相同为0 不同为1
// << 左移 补0
// >> 右移 补符号位的值
int a = 1;
int b = 2;
a = a ^ b;
b = a ^ b;
a = a ^ b;
return 0;
}
栈区
#include<stdio.h>
// 栈区
// 堆区
// 全局/静态区
// 字符常量区
//作用域 {}
//局部变量 在作用域中声明的变量 存在栈区
//栈区
//生命周期 声明时出生 作用域结束时消亡
//使用范围 所声明的作用域内
//特性 没有
int *AA()
{
int a = 100;
return &a;//不要将局部变量的地址作为返回值返回
}
int main()
{
int* p = AA();
printf("%d\n", *p);
printf("%d\n", *p);
printf("%d\n", *p);
printf("%d\n", *p);
return 0;
}
堆区
#include<stdio.h>
#include<stdlib.h>
//堆区 手动申请的空间 malloc
//生命周期 出生 malloc 消亡free
//使用范围 整个程序
//特性 没有
//
//void* 泛型指针 没有类型的指针
int* AA()
{
int* p = (int*)malloc(4);
*p = 100;
//free(p);
return p;
}
int main()
{
int* p = AA();
printf("%d\n",*p);
printf("%d\n", *p);
free(p);//必须是申请空间时的首地址
printf("%d\n", *p);
printf("%d\n", *p);
//手动申请的空间必须回收掉
/*int* p = (int*)malloc(4);
*p = 100;
printf("%d\n",*p);
char* p1 = (char*)malloc(4);
p1[0] = 'a';
p1[1] = 'b';
p1[2] = 'c';
p1[3] = 'd';
printf("%c\n",*p1);*/
return 0;
}
全局区
#include<stdio.h>
//全局变量 静态区
//生命周期 出生 程序执行时 消亡 程序结束时
//适用范围 整个程序
//特性 默认初始化为0
//当局部变量和全局变量重名时 优先识别局部变量
int a;
int* AA()
{
int a;
a = 100;
return &a;
}
int main()
{
int* p = AA();
printf("%d\n", *p);
printf("%d\n", *p);
printf("%d\n", *p);
printf("%d\n", *p);
return 0;
}