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,成功返回地址

 

posted @   千年风雅丶  阅读(315)  评论(0编辑  收藏  举报
编辑推荐:
· 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训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示