C语言练习 -- 3
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { int a = 0; //~按(2进制)位取反 //00000000000000000000000000000000 //11111111111111111111111111111111 - 补码 //11111111111111111111111111111110 - 反码 //10000000000000000000000000000001 - 原码 //-1 printf("%d\n", ~a); return 0; } int main() { int a = 11; a = a | (1 << 2); printf("%d\n", a);//15 //00000000000000000000000000001011 //00000000000000000000000000000100 // 1<<2 //00000000000000000000000000001111 a = a & (~(1 << 2)); printf("%d\n", a);//11 return 0; } int main() { int a = 10; //printf("%d\n", ++a);//前置++,先++,后使用 printf("%d\n", a++);//后置++,先使用,再++ return 0; } int main() { int a = (int)3.14; return 0; } int main() { int a = 3; int b = 5; int c = a && b; printf("%d\n", c); return 0; } && - 从前往后,判断为0,后面就不算了 || - 从前往后,判断为1,后面就不算了 int main() { int a = 0; int b = 0; if (a > 5) { b = 3; } else b = -3; //用三目操作符 b = (a > 5? 3 : -3); return 0; } int main() { int a[10] = { 0 }; a[4] = 10; 1 + 2; return 0; } int get_max(int x, int y) { return x > y ? x : y; } int main() { int a = 10; int b = 20; //调用函数的时候的()就是函数调用操作符 int max = get_max(a,b); printf("max = %d\n", max); return 0; } 学生 int float 创建了一个结构体类型 - struct Stu struct Stu { //成员变量 char name[20]; int age; char id[20]; }; int main() { int a = 10; //使用struct Stu这个类型创建了一个学生对象s1,并初始化 struct Stu s1 = {"张三",20,"B18040203011"}; struct Stu* ps = &s1; printf("%s\n", ps->name); printf("%d\n", ps->age); //结构体指针->成员名 //printf("%s\n", (*ps).name ); //printf("%d\n", (*ps).age); //printf("%s\n", s1.name); //printf("%d\n", s1.age); //printf("%s\n", s1.id); //结构体变量.成员名 return 0; } int main() { char a = 3; //00000000000000000000000000000011 //00000011 - a // char b = 127; //00000000000000000000000001111111 //01111111 - b //a和b如何相加 //00000011 //01111111 char c = a + b; printf("%d\n", c); return 0; } int main() { int a = 10; int b = 20; int c = b + a + 3; printf("%d\n", c); return 0; } int main() { int a = 0; int c = 1; a = c + --c;//不同编译器结果不同,不建议这么写 printf("%d\n", c); return 0; } int main() { int a = 0x11223344; //int* pa = &a; //*pa = 0; char* pc = &a; *pc = 0; //指针类型决定了指针进行解引用操作的时候,能够访问空间的大小 // int*p; *p能够访问4个字节 // char*p; *p能够访问1个字节 // double*p; *p能够访问8个字节 //printf("%p\n", pa); //printf("%p\n", pc); } int main() { int arr[10] = { 0 }; char* p = arr;//数组名 - 首元素的地址 int i = 0; for (i = 0; i < 10; i++) { *(p + i) = 1; } return 0; } 野指针 int main() { //int a;//局部变量不初始化,默认是随机值 int* p;//局部指针变量,不初始化,默认随机值 *p = 20; return 0; } int main() { int arr[10] = { 0 }; int* p = arr; int i = 0; for (i = 0; i < 12; i++) { p++;//指针会越界 } return 0; } 野指针(空间被释放) test() { int a = 10; return &a; } int main() { int* p = test(); *p = 20; return 0; } int main() { //未初始化的指针变量 int* p;//局部变量不初始化,里面默认放的是一个随机值 *p = 20; return 0; } int main() { //int a = 10; //int* pa = &a;//初始化 //int* p = NULL;//NULL - (int*)0 - 空指针 - 用来初始化指针,即指针赋值 int a = 10; int* pa = &a; *pa = 20; pa = NULL; *pa = 10;//error if (pa != NULL) { } } int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int i = 0; int sz = sizeof(arr) / sizeof(arr[0]); int* p = &arr[9]; //for (i = 0; i < sz; i++) //{ // printf("%d ", *p); // //p = p + 1; // p++; //} for (i = 0; i < 5; i++) { printf("%d ", *p); //p = p + 1; p-=2; } return 0; } int main() { char ch[5] = { 0 }; int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; printf("%d\n", &arr[9] - &arr[0]); printf("%d\n", &arr[9] - &ch[0]);//err return 0; } int my_strlen(char* str) { char* start = str; char* end = str; while (*end != '\0') { end++; } return end - start; } int main() { //strlen - 求字符串长度 //递归 - 模拟实现了 strlen - 计数器的方式 char arr[] = "bit"; int len = my_strlen(arr); printf("%d\n", len); return 0; } int main() { int arr[10] = { 0 }; printf("%p\n", arr);//地址 - 首元素地址 printf("%p\n", arr+1); printf("%p\n", &arr[0]); printf("%p\n", &arr[0]+1); printf("%p\n", &arr);// printf("%p\n", &arr+1); //1.&arr - &数组名 - 数组名不是首元素的地址 - 数组名表示整个数组 - &数组名 取出的是整个数组的地址 //2.sizeof(arr) - sizeof(数组名) - 数组名表示的是整个数组 - sizeof(数组名)计算的是整个数组的大小 return 0; } int main() { int arr[10] = { 0 }; int* p = arr; int i = 0; for (i = 0; i < 10; i++) { *(p + i) = i; } for (i = 0; i < 10; i++) { printf("%d ", arr[i]); //printf("%d ", *(p + i)); } //for (i = 0; i < 10; i++) //{ // printf("%p ============== %p\n", p + i,&arr[i]); //} return 0; } int main() { int a = 10; int* pa = &a; int** ppa = &pa;//ppa就是二级指针 //int*** pppa = &ppa; **ppa = 20; printf("%d\n", **ppa); printf("%d\n", a); return 0; } 指针数组 - 数组 - 存放指针的数组 数组指针 - 指针 - int main() { int a = 10; int b = 20; int c = 30; int* pa = &a; int* pb = &b; int* pc = &c; 整型数组 - 存放整型 字符数组 - 存放字符 指针数组 - 存放指针 int arr[10]; int* arr2[3] = {&a,&b,&c};//指针数组 int i = 0; for (i = 0; i < 3; i++) { printf("%d\n", *(arr2[i])); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程