黑马程序员-c语言指针的学习

c语言的难点和精华部分就是指针,能够将指针完全理解并且将其运用熟练不是一件容易的事情,其中有几个知识点比较绕一些。

1.数组指针与指针数组的区别。

   数组指针是一个指针,是指向数组的指针,就如同int*,char*型指针,只不过它是指向数组的(首元素),大小为4(32位平台下),通过它就可以做找到整个数组。

 1 #include <stdio.h>
 2 int main(int argc, char *argv[])
 3 {
 4     int a[3][4] = {{0,1,2,4},
 5                    {5,6,7,8},
 6                    {9,10,11,12}};
 7     int (*p)[4];
 8     p = a;
 9     printf("%d",**(p +1)) ;
10     return 0;
11 }

其中 int (*p)[4] 是一个二维的数组指针。

指针数组是一个数组,数组的元素都是指针而已,看下面代码

 1 #include <stdio.h> 
 2 int main(int argc, char *argv[])
 3 {
 4     int a[3][4] = {{0,1,2,4},
 5            {5,6,7,8},
 6             {9,10,11,12}};
 7    int *p[3];
 8    for(int i=0;i<3;i++){
 9    p[i] = a[i];
10  }
11    printf("%d",*p[1]) ;
12    return 0;
13  } 

int *p[3]里面存的都是指针

 

2.指针函数和函数指针的区别

指针函数是一个函数,它的返回值是一个指针而已。其实准确来说没有指针函数这么一说,只有返回值为指针的函数或者参数为指针的函数

函数指针是一个指针,这个指针指向具体的一个函数。它在程序设计中是非常有用的,可以显著的减少代码量和优化代码结构,下面是一个简单的用法示例。

 1 #include "stdio.h"
 2 
 3 #define OK 1
 4 
 5 int Fun1(int num)
 6 {
 7     printf("The Fun1 value is %d\n",num);
 8     return OK;
 9 } 
10 
11 int Fun2(int num)
12 {
13     printf("The Fun2 value is %d\n",num);
14     return OK;
15 } 
16 
17 int Fun3(int num)
18 {
19     printf("The Fun3 value is %d\n",num);
20     return OK;
21 } 
22 
23 
24 int main()
25 {   
26     int i,state;
27     //定义函数指针 
28     int (*Fun_p[3])(int num); 
29     //初始化函数指针 
30     Fun_p[0] = Fun1;   
31     Fun_p[1] = Fun2;
32     Fun_p[2] = Fun3;
33     
34     for(i=0;i<3;i++)
35        state = Fun_p[i](i);
36     getchar();
37     return ;
38 }

 

posted on 2014-09-04 16:09  himym2005  阅读(157)  评论(0编辑  收藏  举报

导航