Chinaunix首页 | 论坛 | 博客
  • 博客访问: 519553
  • 博文数量: 398
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 14
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-21 16:02
个人简介

嵌入式屌丝

文章分类

全部博文(398)

文章存档

2013年(398)

我的朋友

分类: 嵌入式

2013-08-21 16:40:55

函数与指针:


void fun(){


}
-----函数名---就是一个常指针-----函数的地址-----对函数名取地址在效果上与 函数名一样的----- fun == &fun
函数指针:
pfun=fun;//-------
pfun =&fun;


函数间接访问
pfun(XXX);
(*pfun)(XXX);//--------


int a;
int *p = &a;


XXXX (*FUN)(XXXX)
XXXX (*FUN1)(XXXX)
XXXX (*FUN2)(XXXX)
typedef  int INT
//typedef void (*)(void) FUN;----error
int (*FUN)(void)//----------------是一个指针变量----存放的是函数指针----int (*) (void)
typedef int (*FUN)(void);//-------取别名。FUN成为了一种数据类型


int a[2];
FUN pfun[2];


void fun(){
FUN  pfun[2];
pfun[0]=&fun1;
pfun[1]=&fun2;


(*pfun[0])();
(*pfun[1])();


}
--------------------------------------
空指针在函数指针中的应用:
typedef void (*FUN)(void)
void fun(){    }
void *p;
 p = (void *)fun;
 ((FUN)p)();


或者
// (( void(*)(void) )p)();
------------------------------------------
void fun(){


}
void(*FUN)(void)


FUN = fun;//fun()


FUN();


fun(a,b,1)----add
fun(a,b,0)----dec
fun(){
if---1
a+b;
else
a-b
}


add(3,2)----int ---
add(3.0,2.0)-----float----
---------------------------------------


函数指针做函数参数的运用:
void fun(int a)
void fun(int *a)
void fun(void(*pfun)(void));
void fun(FUN pfun){
(*pfun)();
}


main(){
fun();
}
main(){
(*pfun)();
}
--------------------------------------
实践兴趣----------malloc(0)
#include
#include
int  main(){
int *p =(int *)malloc(4);
if(p==NULL){
perror("malloc");
exit(-1);
}
*p=100;


printf("*p = %d\n",*p);
free(p);
return 0;
}


--------------------------------
函数能成功返回空间的几种方式:
1.
void get_mem(char **s){
*s=(char *)malloc(size);
}
2.
char *s;
void get_mem(){
s=(char *)malloc(size);
}
3.
char * get_mem(){
return (char *)malloc(size);
}
4.
char *get_mem(){
static char str[size];
return str;



///------------------
自学--自觉: void *calloc(size_t nmemb, size_t size);
//----------------------
volatile  -----防编译器优化
优化选项----—O  —O2
 gcc -O2 -S -o *.S *.c
 int main(){
volatile int a;
a=3;//----
a=4;//----
a=5;//----


return 0;
}
//------------------------
const int a=3;------//不可被直接修改,可以被间接修改
int const a;//同上,等价


const int *p ;//不能通该指针去修改所指向区间的内容,可以通过其他方式修改(其他指针,变量名等)
//指针本身的值可以被修改
int const *p ;
// 同上


int * const p;//指针所指向的空间的内容可以被修改
//指针本身的值不可被直接修改,可以通过其他方式修改
const int * const p;
//---------------------------
& | ~ ^ << >>
//---------------------------
char c 0x73
0111 0011----
&   1111 1101


0111 0011
0001--- 0x1     
1111 0000  0010  ~
1111 1111  1101


c & ~(0x1< 0111 0011
| 0000 0100
c | (0x1< -----------------------------


fun(int *a){
*a=4;
}




main(){
int a=3;
fun(&a)


}
----------------------------------------------
char *s ="nihao";
char s[]="nihao";
char *s[]={
"ni",
"hao",
"ma"
}
char s[][4]{
"ni",
"hao",
"ma"
}
---------------------------------

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