- 博客(7)
- 收藏
- 关注
原创 二维数组和指针
5、将二维数组的每一个一维数组用一个一维数组指针保存,再将多个一维数组指针用一个一维指针数组保存,然后再用一个二级指针,保存这个一维指针数组 s是一个指针数组,每个元素都是指针,t是一个二级指针,t = s 等价于 t = &s[0] t+1 代表的是s[1],也就是arry[1] *(t + 1)进入这个一维数组内部,通过下标访问指定元素 *(t + 1)[1]用一个二级指针,可以保存一个指针变量的一维数组,eg: int* a[3] = {arry[0],arry[1]};
2024-09-01 23:31:30
306
原创 c++创建线程
stl库的线程具有跨平台的能力,有了thread依赖库,线程才能运行,vs默认有thread依赖库,linux默认是没有thread依赖库,编译时,需要添加-lphread选项,链接POSIX线程库。所有程序都会有一个主线程,从 main函数开始执行,进程可以比作一间教室,线程则是教室里的每个学生,每个学生是独立的,但他们共享教室中的资源。join阻塞函数,告诉主线程,等子线程结束后,再继续执行主线程,主线程一结束,程序就结束。程序的实际运行是通过线程来完成的,线程由进程创建,一个进程可以有多个线程。
2024-08-25 10:09:57
134
原创 c++多线程
创建三个线程,分别传入要打印的字符,线程号,循环次数,全局变量当前线程号初始化为1,如果是线程2或者线程3先执行printfChar函数,先获得锁,别的线程会被阻塞,然后执行wait函数的时候,条件不满足,wait函数将当前线程阻塞,并释放锁,当线程1执行printfChar函数时,获得锁,执行wait函数,条件满足,释放锁,继续执行到notify_all,唤醒所有线程,线程2和线程3执行wait,再检查条件,不满足继续阻塞,满足,往下执行。引入互斥对象,对共享资源加以保护。
2024-08-24 15:37:30
916
原创 线程同步的几种方式
主函数中创建信号量对象,初始化只有一个信号量,创建两个线程,线程函数中WaitForSingleObject判断信号量,不是0,就捕获一个信号量,信号量数量减1,完成对共享资源的读写后,ReleaseSemaphore释放一个信号量,排队等待的线程就可以捕获该信号量,执行对应的线程函数。在test函数内部,在读写共享资源g_count之前,获取锁,别的线程只能等待,确保同一时间只能一个线程读写该资源,处理完之后,释放锁,别的线程可以获取锁,从而读写共享资源。1、如果当前资源的数量大于0,则信号量有效。
2024-08-23 09:40:23
947
原创 c++异常处理
如果异常处理太多,影响代码的可读性,不能清晰提炼出函数的主要逻辑,所以考虑将函数的主要逻辑和异常处理分开,将控制权从程序的一个部分转移到另一个部分。抛出个const char*,catch参数也是const char*,匹配上了,但是,代码可读性不好。改进一下,将函数的返回值作为bool变量进行判断,异常走异常处理,正常走正常处理,不终止程序的运行。throw可以抛出任意类型,catch根据捕获的不同的类型,执行不同的异常处理。继续改进,一个函数中,抛出多个异常,根据抛出的不同的类型执行不同的异常处理。
2024-08-21 22:15:44
92
原创 ostringstream、istringstream、stringstream 三者的区别
字符串输入流,用于将字符串作为输入源,可以从字符串中读取数据。字符串输出流对象,用于将数据输出到字符串中。可以用作字符串输入流,也可以作为字符串输出流。类似于从标准输入流中读取数据,流到变量中。主要用于拼接字符串以供后续使用或输出。类似于将数据输出到标准输出流中。主要用于从字符串中提取数据。
2024-08-17 19:28:34
260
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人