指针3

指针

五大内存分区

堆、栈、自由储存区、全局\静态储存区、常量储存区;

注意

char *q ="i love you ";中q中的变量是存放在常量储存区,只能读,是不能改变的;

 

字符指针变量和字符数组的不同

1.字符数组由若干个元素组成,每个元素中 放一个字符,而字符指针变量中存放的是地址 (字符串第1个字符的地址),决不是将字符 串放到字符指针变量中。

2.赋值方式 对字符数组只能对各个元素赋值不能用以下办法对字符数组赋值。

char str[20];

str= "I love Fishc. com !

而对字符指针变量,可以采用下面方法赋值: char *a; a="I love  !”; 但注意赋给a的不是字符,而是字符串第一个元素的地址。

3.如果定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址。而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个字符变量的地址也就是说,该指针变量可以指向一个字符型数据,但如果未对它赋予一个地址值,则它并未具体指向一个确定的字符数据。

指向函数的指针

定义

int (*q)()\\括号里面放参数;q指向函数的首地址即函数名;
 

作用

1.通过指针函数,可以在一个子函数里面调用多个函数

eg:

void sub( int (*x1)(int), int (*x2)(int,int)
int a,b, i,j;
a=(*x1)(i);//调用x1函数//
b=(*x2)(i,j);//调用x2函数//

eg:

设一个函数process ,在调用它的时候,每次 实现不同的功能。(有 点类似多态) 输入a和b两个数,第一次调用process时找 出a和b中大者,第二次找出其中小者,第三 次求a与b之和。

#include "stdio.h"
int main()
{
   int progess(int x,int y,int(*pointer)());
   int MAX(int a,int b);
   int MIN(int a,int b);
   int SUM(int a,int b);

   int a,b;
   int max,min,sum;
   
   scanf("%d%d",&a,&b);
   max=progess(a,b,MAX);
   min=progess(a,b,MIN);
   sum=progess(a,b,SUM);
   printf("max=%d\nmin=%d\nsum=%d\n",max,min,sum);
}
int progess(int x,int y,int(*pointer)())
{
   int answer;
   answer=(*pointer)(x,y);
   return(answer);
}
int MAX(int a,int b)
{
   if(a<b)
  {
       return(b);
  }
   else return(a);
}
int MIN(int a,int b)
{
   if(a>b)
  {
       return(b);
  }
   else return(a);
}
int SUM(int a,int b)
{
   return(a+b);
}

 

posted @ 2021-11-19 09:56  eliotJones  阅读(158)  评论(0)    收藏  举报