C语言 用函数来创建动态数组,怎么实现??

C语言 用函数来创建动态数组,怎么实现??,第1张

应该这样

void CreateArray(int n, int a)

{

a = (int ) malloc (sizeof(int) n);

}

C语言使用pthread_create()函数完成多线程的创建,pthread_create()函数共有四个参数。这四个参数分别为:

第一个 参数负责向调用者传递子线程的线程号

第二这个参数负责控制线程的各种属性,这也是线程在创建的时候,最为复杂的一个参数。下面是这个结构体的定义:

在结构体中的第一个参数 detachstate 说明了线程的分离状态。

PTHREAD_CREATE_DETACHED 分离状态:父线程在创建子线程之后,,父线程不会去等待子线程结束再去运行自己接下来的程序;

PTHREAD_CREATE_JOINABLE 状态:父线程会等待子线程运行结束,才继续运行接下来的程序。

注意的是如果当线程一旦处于 PTHREAD_CREATE_DETACHED 状态,那么线程的状态就无法再被修改了。线程创建时默认设置为PTHREAD_CREATE_JOINABLE状态

schedpolicy说明的是线程的调度策略,这个值可以分别被设置为:

SCHED_FIFO: 先进先出

SCHED_RR: 轮转法

SCHED_OTHER: 其他方法

schedparam参数实际上设置的是线程的优先级。这个参数仅当调度策略为实时(即SCHED_RR或SCHED_FIFO)时才有效

这个参数设置线程的调度参数是拷贝父线程的线程调度参数,还是上面的两个参数 schedpolicy schedparam 属性进行设置。

该参数可以被设为:

PTHREAD_INHERIT_SCHED :表示新现成将继承创建线程的调度策略和参数)

PTHREAD_EXPLICIT_SCHED :表示使用在schedpolicy和schedparam属性中显式设置的调度策略和参数

scope参数设置的是线程优先级的使用范围。

PTHREAD_SCOPE_PROCESS 进程级竞争资源

PTHREAD_SCOPE_SYSTEM 系统级竞争资源

这个参数是线程栈的起始地址,这个参数只有在线程栈由自己创建时,才需要设置。当线程栈由用户直接创建,而不是通过系统创建时,线程栈的大小和位置都可以进行修改,但是用户程序需要完成对线程栈空间的释放。在设置该参数之后,guardsize警戒栈缓冲区的大小就变为0,为了防止栈溢出就需要对线程栈的境界栈缓冲区进行设置。

这个参数设置警戒栈缓冲区的大小。警戒栈缓冲区可以保护程序,防止栈溢出对数据造成破坏。

stacksize参数在线程创建之前创建,用来修改创建的线程栈的大小,但是最小不能低于 PTHREAD_STACK_MIN (16384) bytes ,即16k内存大小,也就是4个内存页(4个内存页这一点由内核决定)。

这个参数负责指定子线程需要允许的函数,这个参数需要的是一个函数指针。

这个参数负责指定,子线程所运行的函数的参数值。

#include <stdioh>

#include <malloch>

#include <stdlibh>

struct node

{

int data;

struct node next;

};

typedef struct node StackNode;

struct LStack { StackNode top; };

typedef struct LStack LinkStack;

LinkStack createStack(void);

void main()

{

LinkStack L;

L = createStack();

if (L->top == NULL)printf("22222");

}

LinkStack createStack(void)

{

LinkStack L;

L = (LinkStack)malloc(sizeof(struct LStack));

L->top = NULL;

if (L->top == NULL)printf("11111");

return L;//少了这个啦

}

文件:WinbasehBOOL CreateProcess

  (

  LPCTSTR lpApplicationName,

  LPTSTR lpCommandLine,

  LPSECURITY_ATTRIBUTES lpProcessAttributes。

  LPSECURITY_ATTRIBUTES lpThreadAttributes,

  BOOL bInheritHandles,

  DWORD dwCreationFlags,

  LPVOID lpEnvironment,

  LPCTSTR lpCurrentDirectory,

  LPSTARTUPINFO lpStartupInfo,

  LPPROCESS_INFORMATION lpProcessInformation

  );

一、创建文件:

在C语言中创建文件,使用fopen函数,同时指定为只写即可。 

参考代码如下:

/

    函数功能: 创建文件名为s的文件。

    返回值: 

        -1 参数错误

        0 创建成功

        1 文件已存在

        2 创建失败

/

int create_file(char s)

{

    FILE fp;

    if(s==NULL||s[0]=='\0') return -1;//参数为空,即错误参数。

    fp= fopen(s, "r");//以只读方式打开

    if(fp)//打开成功,表示文件已经存在。

    {

        fclose(fp);//关闭文件

        return 1;//返回文件已存在。 

    }

    fp= fopen(s, "w");//以只写方式创建文件。

    if(fp == NULL) 

        return 2;//创建失败。

    fclose(fp);//关闭文件。

    return 0;//创建成功。

}

二、删除文件:

在C语言中,有专门的删除文件函数remove。

1、头文件:stdioh

2、声明:int remove(const char filename);

3、功能:删除文件名为filename的文件。 

4、返回值:删除成功,返回0否则返回-1

5、示例代码:

#include <stdioh>

int main()

{

    char s[100];

    int ret;

    scanf("%s",s);//输入文件名。

    ret = remove(s);//删除文件

    if(ret==0)//根据结果给出相应提示

        printf("删除文件成功\n");

    else

        printf("删除文件失败\n");

    return 0;

}

lnode  create(){        //返回的是指向结构体变量的指针,跟普通变量同

int i; // 定义变量

linklist head,p; // 定义结构体指针变量

head=(linklist)malloc(sizeof(lnode)); // 开辟一个结构体大小的内存空间,并将其地址赋值给head  

head->next=NULL; // 初始化刚开辟出的结构体空间的next指针域为空

for(i=0;i<10;i++) // 循环10次

{

p=(linklist)malloc(sizeof(lnode)); // 开辟一个接口体大小内存空间,并将其地址赋值给p

scanf("%d",&p->data); // 输入一个数,赋值给刚开辟出的空间data域

p->next=head->next; // 将head的next域的值赋值给p的next域,这样p和head的next指向了相同位置

head->next=p; // 将p赋值给head的next域,这样就相当于将p插入到了队首,head作为队列的起始位置,保存空内容

}

return head; //返回head的值,也就是新开辟的那一串的首地址

}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/12186621.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存