C/C++实践笔记 021指针练习与多线程检索
1.指针地址
寄存器的常量无法取地址
函数的返回值在寄存器的cache或编译器的备份内存,不可以取地址
2.*间接运算符(内容运算符)
根据地址取出内容
C语言,const只能避免直接修改
副本机制对数组例外
3.函数和指针的副本机制
要改变函数外部变量,函数有副本机制,需要传递地址
传递数据都是副本,指针也有副本
副本机制只有数组例外,
改变一个变量,需要变量的地址
改变一个指针变量,需要指针变量的地址
4.多线程参数传递
#include<process.h>
5.指针运算
指针的运算与类型密切相关
没有明确类型大小的指针,不能进行指针运算
指针的加法,只能是指针+整数,在数组里代表往前移动几个 往后移动几个
指针的减法,指针+整数,指针减去一个指针
6.指针与数组
数组中a[10]中
a是数组的第一个元素的地址,a+1和a相差4个字节
&a是数组的类型,&a+1和&a相差40个字节
数组没有副本机制,作为函数的参数时会退化为一个指针
sizeof(*a)=4
sizeof(*&a)=40
sizeof(a)=sizeof(*&a)=40
7.多线程检索
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<time.h> #include<process.h> struct findinfo { int *pstart; //首地址 int length; //长度 int findnum; //要查找的数据 int id; //编号 }; void findit(void *p) { struct findinfo *ps = p; printf("\n线程%d开始查找", ps->id); //遍历首地址,长度10个元素 for (int *pf = ps->pstart; pf < ps->pstart + ps->length; pf++) { if (*pf==ps->findnum) { printf("\n线程%d结束查找,找到数据%d地址%p", ps->id,*pf,pf); return; } } printf("\n线程%d结束查找,没有找到", ps->id); } void main() { int a[100] = { 0 }; time_t ts; unsigned int data = time(&ts); srand(data); for (int i = 0; i < 100; i++) { a[i] = rand() % 100; printf("%4d", a[i]); } int num; scanf("%d", &num); struct findinfo info[10];//结构体数组 for (int i = 0; i < 10; i++) { info[i].pstart = a + 10 * i; //首地址 info[i].length = 10; info[i].id = i; info[i].findnum = num; _beginthread(findit, 0, &info[i]);//调用线程 } system("pause"); }
多线程切割
如8个线程,保证7个一样,另一个处理剩下的
8.二级指针
指针也有副本机制
"123"在代码区,只能读
9.指针结合数组
a[i]等价于 *(a+i)
10.多线程并行计算
(&info)->length 和 info.length等价
void *p可以保存任何类型的指针
11.队列与多线程排队
static限定函数作用域在当前文件
12.空类型指针
空类型指针可以指向任何类型的数据,包含它们的地址
任何指针都可以赋值给空类型的指针,用于保存地址
空类型的指针可以转换为任意类型的指针
一个类型的指针包含了三个信息:地址,步长,内容如何解析
13.memset
memset(str,'A',5); //从str的首地址开始,前进五个字节,进行赋值,赋值一个字符'A' ,即前五个字符都变为A
memset(num,0,20);//对20个字节全部赋值为0,对于数组清零
14.malloc 分配内存
15.函数返回值是指针时的用途
实现字符串拷贝函数
函数返回指针的地址,不成功返回null,成功返回地址
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人