Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4466970
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: C/C++

2011-05-14 13:17:18

数组指针、函数指针

一般的指针  如果不是全局变量,那么他们存储在 stack 栈中
    int b = 4;
    int *a = NULL;
    a=&b;
数组指针
    int b[3];
    int *a = NULL; 
    a = b;
函数指针
    int swap(int a, int b)  //我们定义了一个普通函数
在main中声明
    int (*fun)(int x, int y)
    fun = swap ;  指向普通函数swap 的地址
                   现在,我们就可以通过 fun 引用 swap 了

指针函数

    int *add(int *x, int *y)  //在main外定义 返回值是 int 型的指针

在 main 中,我们这么使用
 
    int *a = NULL; 声明一个 int *a,来
    a = add(&ch1,&ch2);   // a  就是返回的 int * 类型的 指针数据


  1. #include <stdio.h>

  2. int *add(int *x, int *y); //定义 指针函数 返回一个指针
  3. void swap(int *x, int *y); //定义一个 函数

  4. int main()
  5. {
  6.     int arr[5];
  7.     int *p;
  8.     p=arr; //数组指针

  9. //函数指针
  10.     int a=1,b=2;
  11.     void (*swap_tmp)(int *x,int *y);//函数指针
  12.     swap_tmp=swap; //指向 swap函数地址
  13.     printf("a=%d,b=%d\n",a,b);
  14.     swap_tmp(&a,&b);
  15.     printf("swap ...a=%d,b=%d\n",a,b);

  16. //一般指针、数组指针、函数指针 都是指向的本身地址
  17. //-----------------------------------------------------------------------------
  18. //指针函数
  19.     int *c;
  20.     c=add(&a,&b);
  21.     printf("c is %d\n",*c);
  22.     
  23.     return 0;
  24. }

  25. int *add(int *x, int *y) //指针函数
  26. {
  27.     int *a=NULL; //局部变量,在函数返回后,栈空间消失
  28.     a=(int *)malloc(sizeof(int));//所以要动态申请
  29.     *a=*x+*y;
  30.     return a;
  31. }

  32. void swap(int *x, int *y) //普通函数
  33. {
  34.     int tmp;
  35.     tmp=*x;
  36.     *x=*y;
  37.     *y=tmp;
  38. }

  1. ywx@yuweixian:~/yu/professional/3$ ./or
  2. a=1,b=2
  3. swap ...a=2,b=1
  4. c is 3









阅读(1045) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

conceptcon2013-07-16 11:20:55

楼主一天可以弄好多文章。厉害