指针与库函数

来源:互联网 发布:深圳互联网知乎 编辑:程序博客网 时间:2024/05/22 17:59

由于一些因素的影响,我们在学校中学的C语言是十分的肤浅的,而经过这堂课的学习之后,我才发现C语言在以后实际工作的重要地位。

在以前的学习中,我知道函数可以带参数,但是由于当时所编写的程序都比较简单,都是只有一个main函数、一个文件的程序,所以没有想到过既然main函数也是函数那么他也是可以有参数的。main函数的带参数形式为int main(int argc,char **argv)。

那么怎样为一个main函数来添加运行时的参数呢,在运行一个编译生成的可执行文件时我们何以手动来输入参数,比如说./main 参数1 参数2 ......。但是在有很多可执行文件的时候不可能一个个的手动输入,这时候我们可以用shell脚本来为多个可执行文件传递参数,例如:

已有带参数的可执行文件main,test

#!/bin/sh

./main 参数1 参数2 ......

./test 参数1 参数2 ......

指针在C语言中的使用频率是很高。指针有灵活的特点,但在使用时要仔细谨慎否则很容易会发生错误。

指针不但可以指向普通的变量,还可以指向函数。这为我们提高程序的重用性,进行更加合理的开发工作分工创造了有利条件。

比如说,我要使用下面的已经编好的max()比较两个数字的大小,在使用时我不需要知道整个程序的比较算法是怎么实现的,我只需要然程序知道判断的标准就可以了,也就是我只需要提供compar_int()函数就可以了。

void *max(void *base, unsigned int nmemb, unsigned int size, 

    int (*compar)(const void *, const void *))

{

    int i;

    void* max_data = base;

    char* tmp = base;

    for (i=1; i<nmemb; i++) {

        tmp = tmp + size;

        if (compar(max_data, tmp) < 0) {

            max_data = tmp;

        }

    }

    return max_data;

}

int compar_int(const void* x, const void* y)

{

    return (*(int*)x - *(int*)y);

}

在这段程序中我们还可以看到大量的使用了void *类型,void是无类型也就是可以代表所有的类型,这样不管我们要比较的是int型,char型,float型等等都可以在不对max()函数源代码进行修改的情况下使用max()函数,需要修改的是compar_int()函数,避免对代码进行大段的修改,提高了代码的重用性。

在编程工作中我们总是要用到很多的库函数,使用库函数可以大大的提高我们编程的效率。库函数中的函数都是由程序方面的专家进行过优化的,所以效率相对来说都是比较高的。

在程序的运行中我们的数据都是需要存放在内存中的,内存的分配是由操作系统来管理的,在使用的时候我们就需要向系统申请内存,在C语言的库函数中有malloc和calloc来为我们的请求动态的分配内存。在使用完内存之后,我们就需要将所占用的内存释放掉以便下次使用,释放内存可以用free来实现。

例如:

#include<stdlib.h>

#include<stdio.h>

int main()

{

int *a;

a=malloc(20);

if(a!=NULL)

printf("get 20 byte");

else

printf("error");

free(a);

return 0;

}

在C语言中我们进场要对文件进行操作,对文件进行操作就要用到标准I/O库函数。

例如:

#include<stdio.h>

#include<stdlib.h>

int main()

{

FILE *f;

char *s=malloc(100);

scanf("%s",s);

f=fopen("test","w+");

if(f==NULL)

return 1;

fwrite(s,10,1,f);

fclose(f);

return 0;

}

执行该程序可以向文件test输入字符串。在输入前要给s分配内存空间,否则在程序执行时会出现段错误。

在和他人合作开发项目时,库函数就是相互交流的语言,合理的使用各种库函数是一名程序员要掌握的基本技能。

0 0
原创粉丝点击