• [技术干货] C++指针全面指南
    指针是C++中最强大但也最复杂的特性之一。它直接操作内存地址,为程序员提供了极大的灵活性和控制力。以下是C++指针的详细使用方法。一、指针基础1. 指针声明与初始化int var = 10; // 普通整型变量int *ptr = &var; // 指针变量,存储var的地址cout << "变量值: " << var << endl; // 输出: 10cout << "指针地址: " << ptr << endl; // 输出: 0x7ffd2a3a4b24 (示例地址)cout << "指针解引用: " << *ptr << endl; // 输出: 102. 指针的基本操作int x = 5, y = 10;int *p1 = &x;int *p2 = &y;*p1 = 20; // 通过指针修改x的值cout << x << endl; // 输出: 20p1 = p2; // 指针赋值,现在p1也指向ycout << *p1 << endl; // 输出: 10二、指针与数组1. 数组名的指针特性int arr[5] = {1, 2, 3, 4, 5};int *p = arr; // 数组名就是首元素地址cout << *p << endl; // 输出: 1cout << *(p + 2) << endl; // 输出: 3 (指针算术)cout << p[3] << endl; // 输出: 4 (指针下标访问)2. 指针遍历数组for (int *ptr = arr; ptr < arr + 5; ptr++) { cout << *ptr << " ";}// 输出: 1 2 3 4 5三、指针与函数1. 指针作为函数参数void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp;}int main() { int x = 5, y = 10; swap(&x, &y); cout << x << " " << y << endl; // 输出: 10 5 return 0;}2. 返回指针的函数int* findMax(int *arr, int size) { if (size <= 0) return nullptr; int *max = arr; for (int i = 1; i < size; i++) { if (arr[i] > *max) { max = &arr[i]; } } return max;}四、动态内存管理1. new和delete操作符// 分配单个intint *p = new int(42); cout << *p << endl; // 输出: 42delete p;// 分配数组int *arr = new int[5]{1, 2, 3, 4, 5};delete[] arr; // 注意使用delete[]释放数组2. 智能指针(C++11起)#include <memory>// unique_ptr (独占所有权)std::unique_ptr<int> uptr(new int(10));cout << *uptr << endl;// shared_ptr (共享所有权)std::shared_ptr<int> sptr1 = std::make_shared<int>(20);std::shared_ptr<int> sptr2 = sptr1; // 共享所有权五、多级指针int var = 100;int *ptr = &var;int **pptr = &ptr; // 指向指针的指针cout << **pptr << endl; // 输出: 100六、指针与const1. 指向常量的指针const int value = 5;const int *ptr = &value; // 不能通过ptr修改value// *ptr = 10; // 错误!2. 常量指针int x = 10;int *const ptr = &x; // ptr的指向不能改变*ptr = 20; // 可以修改指向的值// ptr = &y; // 错误!3. 指向常量的常量指针const int y = 30;const int *const ptr = &y; // 既不能改指向也不能改值七、函数指针1. 基本函数指针#include <iostream>using namespace std;int add(int a, int b) { return a + b; }int subtract(int a, int b) { return a - b; }int main() { // 声明函数指针 int (*operation)(int, int); operation = add; cout << operation(5, 3) << endl; // 输出: 8 operation = subtract; cout << operation(5, 3) << endl; // 输出: 2 return 0;}2. 函数指针作为参数void calculate(int x, int y, int (*op)(int, int)) { cout << op(x, y) << endl;}int main() { calculate(10, 5, add); // 输出: 15 calculate(10, 5, subtract); // 输出: 5 return 0;}八、void指针void print(void *ptr, char type) { switch(type) { case 'i': cout << *(int*)ptr << endl; break; case 'f': cout << *(float*)ptr << endl; break; case 'c': cout << *(char*)ptr << endl; break; }}int main() { int a = 10; float b = 3.14f; char c = 'X'; print(&a, 'i'); print(&b, 'f'); print(&c, 'c'); return 0;}九、指针安全注意事项空指针检查:解引用前检查指针是否为nullptrif (ptr != nullptr) { *ptr = 10;}野指针问题:指针释放后应立即置空delete ptr;ptr = nullptr;内存泄漏:确保每个new都有对应的delete数组越界:指针算术不要超出分配的内存范围类型安全:避免不安全的类型转换
  • [大赛资讯] 复赛正式赛较复赛练习赛是否存在更改点
    听说别的赛区群里说了复赛现场赛会有新的变更点,但是本赛区群没收到通知,想确认一下这个信息。
  • [大赛资讯] 系统报错信息解释较粗略
    如图,在官方帖子找到了该解释,但是这个解释“对象块未加载的“具体含义是什么呢?
  • [大赛资讯] 采样比例问题
    根据参数注意到,线下对线上数据的采样率接近2/3。请问复赛正式赛的采样率是否等于练习赛?这个规模的采样率,与更低规模的采样率,使用的策略可能大为不同。是否下发数据的采样率偏高?
  • [大赛资讯] 询问区域复赛线下地点问题
    想请问一下上合赛区区域复赛比赛地点在哪里? 入围复赛的队伍必须4月12日线下参赛吗,如有困难线上参赛是否可以?
  • [大赛资讯] Time_out问题
    是否有可能返回有time_out问题的程序的完整执行时间呢,这样可以大概了解一下程序需要优化的程度
  • [大赛资讯] 提交结果为interaction_successful,但分数为0分
    提交结果为interaction_successful,但分数为0分,请问可能是什么原因呢? 在本地extra数据可以获得900万(25%)的分数。按理说评测的时候再差也不可能一点分数也没有呢?想问一下是否是接口问题
  • [大赛资讯] 复赛现场赛设备问题
    目前开发机为高性能的台式机,笔记本性能较弱,复赛现场赛支持远程连接吗?关注点是规则允许问题,网络和技术问题可以自己解决。
  • [大赛资讯] unexpected_eoln
    本地测试通过,用时180s,但是线上提交一直都是unexpected_eoln
  • [大赛资讯] 输入输出
    cout会是影响性能的因素吗,需要考虑优化cout吗
  • [大赛资讯] UI界面参数问题
    codecraft.exe中的Req Nums指的是当前时间片下,当前对象所有的读取请求吗(包括已完成和未完成)?如果不是,那具体指的是什么呢?
  • [大赛资讯] 本地可以运行但是上传报unexpected_elon
    我本地docker环境和要求一致,可以通过运行。我通过-d检查后也未找到多出的换行,相关输出格式均和demo一致。请问我应该从哪个方面检查问题这个是我本地运行结果这个是上传提交的结果请帮帮我!
  • [传感器适配] MDC510 Pro 摄像头适配问题
    MDC510 Pro 摄像头传感器适配根据文档只有接口的方式,不是很清楚怎么去进行使用,能否有示例demo之类的方便用户个人开发使用。
  • [大赛资讯] 关于 runtime_error的问题
    在官网提交代码后,没有明确的错误码返回呀,本地跑没有任何问题,提交就是runtime_error。我们尝试修改官方提供的demo,故意让对象写在同一个地方,提交之后还是runtime_error,这相当于只要有任何问题都是runtime_error,不知道是读错了、写错了、删错了、超时了、代码崩溃了、内存占用过大了......检查代码N遍也找不到问题,根本无从下手呀。
  • [大赛资讯] 关于“第一个时间片首次"Read"消耗64个令牌“的疑问
    “第一个时间片首次"Read"消耗64个令牌“中的“第一个时间片”指的仅仅是timestamp=1的时间片还是该磁头在整个任务中的首次“read”操作?
总条数:417 到第 页
上滑加载中