C语言学习日记——指针学习(三)

学习目标:

数组指针与函数指针


学习内容:

数组指针

二维数组作为函数参数,形参指向数组的指针

函数指针

malloc分配的空间一定连续


学习练习:

3.1二维数组边缘元素求和:

  4 int sum2d(int (*a)[4],int rows)
  5 {
  6     int i = 0;
  7     int j = 0;
  8     int count = 0;
  9     for( i = 0; i < rows;++i)
 10     {
 11 
 12         for(j = 0; j < 4;++j)
 13         {
 14             if(i == 0 || j ==0 || i == rows -1 ||j == 3 )
 15             {
 16                 count += *(*(a + i) + j);
 17             }
 18         }
 19     }
 20     return count;
 21 
 22 }

3.2开辟空间P输出斐波那契数列前十项:

 60 int fib(int n)
 61 {
 62 
 63     if(1 == n || n == 2)
 64     {
 65         return 1;
 66     }
 67     else
 68     {
 69         return fib(n - 1) + fib( n -2);
 70     }
 71 }


 if(p)
123     {
124         for( int i = 0;i < 10; ++i)
125         {
126             p[i] = fib(i + 1);
127         }
128         for(int i = 0;i < 10;++i)
129         {
130             printf("%d ",p[i]);
131         }
132         printf("\n");
133     }
        free(p);
        p = NULL;

3.3拼接空间q继续输出斐波那契数列前二十项:

134     int *q = malloc(80);
135     memcpy(q,p,40);
136     free(p);
137     p = q;
138     printf("拼接空间q继续输出斐波那契数列前二十项:");
139     if(q)
140     {
141         for( int i = 10;i < 20; ++i)
142         {
143             q[i] = fib(i + 1);
144         }
145         for(int i = 0;i < 20;++i)
146         {
147             printf("%d ",q[i]);
148         }
149         printf("\n");
150     }
151     free(p);
        P = q = NULL;

3.4逆序输出二维数组:

23 void swap(int *a, int *b)
 24 {
 25     int temp = *a;
 26     *a = *b;
 27     *b = temp;
 28 }
 29 
 30 void reverse(int *begin,int *end)
 31 {
 32     while(begin < end)
 33     {
 34         swap(begin++,end--);
 35     }
 36 }
 37 void revers2d(int (*a)[4],int rows)
 38 {
 39     int i ,j;
 40     for(i = 0; i < rows;++i)
 41     {
 42         reverse(*(a+i),*(a + i) + 3);
 43     }
 44 
 45 }
 46 

3.5条件查询回调div5函数:

73 int div3(int a)
 74 {
 75     return a % 3 == 0;
 76 }
 77 int div5(int a)
 78 {
 79     return a % 5 == 0;
 80 }
 81 
 82 void printfArray(int *a,int len,int (*p)(int))
 83 {
 84 
 85     int i;
 86     for( i = 0;i< len;++i)
 87     {
 88         if(p(a[i])  != 0)
 89         {
 90             printf("%d ",a[i]);
 91         }
 92     }
 93     printf("\n");
 94 }
 95 

3.6快速排序回调shortcmp函数:

 96 int shortcmp(const void *a,const void *b)
 97 {
 98     short *p = (short *)a;
 99     short *q = (short *)b;
100     if(*p > *q)
101     {
102         return 1;
103     }
104     else if( *p == *q)
105     {
106         return 0;
107     }
108     else
109     {
110         return -1;
111     }
112 }

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值