码迷,mamicode.com
首页 > 编程语言 > 详细

以冒泡排序为例--malloc/free 重定向stdin stdout

时间:2016-04-24 20:10:55      阅读:406      评论:0      收藏:0      [点我收藏+]

标签:

 esort.c 代码如下,可关注下mallloc/free,freopen重定向的用法,排序为每轮将最小的数放在最前面:

技术分享
 1 #include<stdio.h>
 2 #include<malloc.h>
 3 
 4 #define    N    8
 5 
 6 void datin(int *p);
 7 void printout(int *p,int len);
 8 void esort(int p[]);
 9 
10 int main(void)
11 {
12     int len=0;
13     int *a,*ptrinit;
14     a = (int *)malloc(sizeof(int)*N);
15     ptrinit = a;
16     if(a == NULL)
17     {
18         printf("a malloc err!\n");
19         return -1;
20     }
21     datin(a);
22     //a = ptrinit;
23     printf("\n input data :\n");
24     printout(a,N);
25     esort(a);
26     printf("\n esort data :\n");
27     printout(a,N);
28     
29     free(a);
30     printf("\n--exit--\n",len);
31     return 1;
32 }
33 
34 void esort(int p[])
35 {
36     int i=0,j=0;
37     int temp = 0;
38     for(i=0; i<N; i++)
39         for(j=i; j<N; j++)
40         {
41             if(p[i] > p[j])    
42             {
43                 temp = p[i];
44                 p[i] = p[j];
45                 p[j] = temp;
46             }
47         }
48 }
49 
50 void datin(int *p)
51 {
52     int len =0 ;
53     freopen("data.txt","r",stdin);  //data input
54     while(len<N)
55     {
56         scanf("%d",p);
57         len++;
58         p++;
59     }
60     fclose(stdin);
61 }
62 
63 void printout(int *p,int len)
64 {
65     int i=0;
66     while(i<len)
67     {
68        printf("%d\t",*p);
69        p++;
70        i++;
71     }
72 }
View Code

 注意如下函数,形参int *p为整型指针类型:

 1 void datin(int *p)
 2 {
 3     int len =0 ;
 4     freopen("data.txt","r",stdin);  //data input
 5     while(len<N)
 6     {
 7         scanf("%d",p);
 8         len++;
 9         p++;
10     }
11     fclose(stdin);
12 }

1)在输入和输出数据的函数中,指针做形参时,在函数中是不会修改指针的地址的,只能修改指针所指向的内容,即 *p。

2)结合栈(stack)的理解,函数传递的参数和临时变量都是保存在 栈里面的,在函数退出时,栈里面的内容会被释放掉。

3)所以,指针的地址是不会被改变的,就算是 在函数中做了p++的操作。通过scanf改变了 (*p)的数值

 

Makefile ,可用于编译 gcc 和 arm-linux-gcc 版本

CC := gcc
OBJS := esort.o
esort: $(OBJS)
    $(CC) $(OBJS) -o esort
$(OBJS): esort.c
    $(CC) -c esort.c -o $(OBJS)
    
ARMCC := arm-linux-gcc
ARMOBJS := arm_esort.o
arm_esort: $(ARMOBJS)
    $(ARMCC) arm_esort.o -o arm_esort
$(ARMOBJS): esort.c
    $(ARMCC) -c esort.c -o $(ARMOBJS)
    
clean:
    rm ./*.o
    rm ./esort
    rm ./arm_esort

编译 gcc 版本

[hy@localhost pjesort]$ make
gcc -c esort.c -o esort.o
gcc esort.o -o esort

编译 arm-linux-gcc版本

[hy@localhost pjesort]$ make arm_esort
arm-linux-gcc -c esort.c -o arm_esort.o
arm-linux-gcc arm_esort.o -o arm_esort

执行情况:

[hy@localhost pjesort]$ cat data.txt 
255 16 1000 230 90 171 10 32
[hy@localhost pjesort]$ ./esort

 input data :
255    16    1000    230    90    171    10    32    
 esort data :
10    16    32    90    171    230    255    1000    
--exit--

 代码链接:

http://pan.baidu.com/s/1o83Wqgi

 

以冒泡排序为例--malloc/free 重定向stdin stdout

标签:

原文地址:http://www.cnblogs.com/hythink/p/5424615.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!