指针的好处

东方云哲 东方云哲     2022-09-04     741

关键词:

#include <pthread.h>  
#include <stdio.h>  
#include <sys/time.h>  
#include <string.h>
#include <stdlib.h>  
#define MAX 10  
pthread_t thread[2];  
pthread_mutex_t mut;  
int number=0, i;  
struct parameter{
 char* fd;
 int hit;
};
void *threadd(void* data)  
{  
        struct parameter *p;
        p=(struct parameter*)data;
        int fd=p->fd;
        int hit=p->hit;
        printf ("thread : I‘m thread %d,%d
",fd,hit);  
         while(i<MAX){
              //  printf("thread%d : number = %d
",threadNum,number);  
                pthread_mutex_lock(&mut); 
                printf("thread%d : number = %d,i = %d
",fd,number,i); 
                        number++;  
                printf("thread%d : number = %d,i = %d
",fd,number,i);
                i++;
                pthread_mutex_unlock(&mut); 
               sleep(1); 
       }   
        printf("thread%d :主函数在等我完成任务吗?
",fd);  
        free(p);
        pthread_exit(NULL);  
}
void thread_create(void)  
{  
        int temp;  
        memset(&thread, 0, sizeof(thread));            
        /*创建线程*/ 

       //struct parameter p;
        // p.fd=555;
        // p.hit=666       

 struct parameter*pptr=malloc(sizeof(struct parameter));

        pptr->fd="555";
        pptr->hit=666;
       if((temp = pthread_create(&thread[0], NULL, threadd, pptr)) != 0)//pthread_create函数和主进程不是按顺序执行,因此若用p而不是pptr为threadd传递参数
                                                                         //会导致thread_create函数(是自定义的函数,不是pthread_create函数)执行到大括号而结束,而此时pthread_create函数还没有执行完,而使得p中的值失效。
printf("线程1创建失败! "); else printf("线程1被创建 "); struct parameter*qptr=malloc(sizeof(struct parameter)); qptr->fd="777"; qptr->hit=888; if((temp = pthread_create(&thread[1], NULL, threadd, qptr)) != 0) printf("线程2创建失败"); else printf("线程2被创建 "); // sleep(3); } void thread_wait(void) { /*等待线程结束*/ if(thread[0] !=0) { pthread_join(thread[0],NULL); printf("线程1已经结束 "); } if(thread[1] !=0) { pthread_join(thread[1],NULL); printf("线程2已经结束 "); } } int main() { /*用默认属性初始化互斥锁*/ pthread_mutex_init(&mut,NULL); printf("我是主函数哦,我正在创建线程,呵呵 "); thread_create(); printf("我是主函数哦,我正在等待线程完成任务阿,呵呵 "); thread_wait(); return 0; }

 

在指针上使用 reference_wrapper 与通过引用传递指针有啥好处?

】在指针上使用reference_wrapper与通过引用传递指针有啥好处?【英文标题】:Isthereabenefittousingreference_wrapperonapointervspassingthepointerbyreference?在指针上使用reference_wrapper与通过引用传递指针有什么好处?【发布时间】:2019-03-2118:17:15... 查看详情

将 NULL 指针转换为对象并调用其成员函数之一有实际好处吗?

】将NULL指针转换为对象并调用其成员函数之一有实际好处吗?【英文标题】:IsthereapracticalbenefittocastingaNULLpointertoanobjectandcallingoneofitsmemberfunctions?【发布时间】:2011-02-0321:42:58【问题描述】:好的,所以我知道从技术上讲这是未... 查看详情

与简单地创建派生类指针相比,将基类绑定到派生类有啥好处?

】与简单地创建派生类指针相比,将基类绑定到派生类有啥好处?【英文标题】:What\'stheadvantageofbindingabaseclasstoaderivedclassasopposedtosimplycreatingaderivedclasspointer?与简单地创建派生类指针相比,将基类绑定到派生类有什么好处?【发... 查看详情

返回引用类型的返回引用的好处

(1)传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。(2... 查看详情

指针的资源管理之罪

在许多人眼里,指针的好处是对相同指针类型的指针值的不同的数值表示总可以找到不同的地址对应,这样就可以在整数算术和关系操作的基础上毫无额外代价地定义指针算术和关系操作;而指针上的操作符“*”抽... 查看详情

kernel中的函数指针(代码片段)

经常会看到这类的结构体:这个结构体中有几个函数指针,这种方式的好处,可以有多种具体的函数实现,但是,这样就统一了接口structaddress_space_operationsint(*writepage)(structpage*page,structwriteback_control*wbc);int(*readpage)(structfile*,structpa... 查看详情

const与指针

在函数参数传递中,如果我们想修改某个实参,使用指针或者引用都可以实现使用指针:voidfunc1(int*a)调用func1(&b)使用引用:voidfunc2(int&a)调用func2(b)可以看出引用较为方便如果不想修改某个实参的话可以在int*前加const,即con... 查看详情

如何定义一个函数指针?

...作如下声明:typedefvoid(*FuncKk)(void);//FuncKk是这一原型函数的指针类型;这样你可以在你的程序中如下:intmain()FuncKk_pfunc=kk;//定义一个FuncKk型的函数指针并初始化;_pfunc();//用该函数指针调用kk函数_PAUSE;return0;上述程序行为良好,体现出... 查看详情

c语言中“指针”和“指针变量”的区别是啥??

参考技术A1、概念不同“指针”是概念,“指针变量”是具体实现,指针也是一个变量,所以需要进行定义,而对于指针的定义,与一般变量一样。2、存放地址不同一个变量的(内存)地址称为该变量的“指针”,通过指针能找到... 查看详情

c指针原理(13)-c指针基础(代码片段)

规范路径格式,win32(windows环境下,路径之间的各个目录分隔将“”改为"/",用“/”分隔,这样的好处是在UNIX和WINDOWS都兼容,而且也简化了目录表示。#ifdef_WIN32staticcharnormalize_slashes(charpath)??charp;??for(p=path;p;++p)????if(p==‘... 查看详情

回调函数(代码片段)

定义:通过函数指针来实现函数调用的东西,函数指针参考随笔《函数指针》好处:通过指针函数的形式,同一类型函数可以有不同实现,调用方可以选择调用不同实现。主要有两种方式:方式一:通过命名方式1#include<stdio.h&... 查看详情

结构体中函数指针与typedef关键用途(函数指针)

// 结构体函数指针。 #include<stdio.h>//为了代码的移植考虑,一般使用typedef定义函数指针类 ,另一个好处是,减少代码的书写量。 typedef void (*shout)(char *name,int age);typedef struct { // 查看详情

如何创建指针数组?(代码片段)

我正在尝试创建一个指针数组。这些指针将指向我创建的Student对象。我该怎么做?我现在拥有的是:Student*db=newStudent[5];但是该数组中的每个元素都是学生对象,而不是指向学生对象的指针。谢谢。答案Student**db=newStudent*[5];//Toall... 查看详情

java对象的访问方式

...址(堆中的实例池)和对象类型数据地址(方法区)通过指针访问对象reference中存储的是对象地址对象中存储类型数据地址优缺点:句柄的存储比较稳定,对象的移动不影响reference指针的好处是速度快,节省了一次指针定位的时... 查看详情

再议c语言(10)restrict关键字的作用(代码片段)

restrict是c99标准引入的,它只可以用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式。即它告诉编译器,所有修改该指针所指向内存中内容的操作都必须通过该指针来修改,而不能通过其它途径... 查看详情

再议c语言(10)restrict关键字的作用(代码片段)

restrict是c99标准引入的,它只可以用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式。即它告诉编译器,所有修改该指针所指向内存中内容的操作都必须通过该指针来修改,而不能通过其它途径... 查看详情

智能指针11(代码片段)

智能指针智能指针存在的必要性智能指针的使用及原理C++98中的智能指针C++11中的智能指针C++11中unique_ptr指针C'++11中的shared_ptrshared_ptr循环引用所引发的问题。如何解决shared_ptr所造成的循环调用所引起... 查看详情

leetcode881救生艇[贪心双指针]heroding的leetcode之路(代码片段)

...c;也不是要最小,最好刚刚好)最好的方法就是双指针,首先将体重排序,左指针指向最轻的,右指针指向最重的,要是这两个组合不了,说明最重的还是太重了,自己单独坐船吧, 查看详情