1.理解:
指针变量的存放地址
指针变量的值
指针变量指向的内容
2.实例:
"abcd"+1
"abcd"存放在内存的文字常量区,这个表达式实际计算的是:字符串存放地址+1
char *p = "abcd";就是将位于文字常量区内"abcd"存放的地址赋值给p变量。
那'abcd' + 1呢:此时'abcd'为常量,表达式值为0x61626364 + 1,就不是指针了
3.
uboot中用到一个函数指针数组。
实现过程如下:
3.1
typedef int (init_fnc_t)(void);
init_fnc_t * init_sequence[] =
{
"board_init",
...
NULL,
};
int board_init(void)
{ ...
return 0;
}
使用init_sequence[0]()时,实际就是调用board_init()函数;
这样使用会方便点,init_fnc_ptr可以做自加,指向下一个函数指针:
init_fnc_t ** init_fnc_ptr;
init_fnc_ptr = init_sequence;
(*init_fnc_ptr)();
3.2
也可以这样做:
typedef int (*init_fnc_t)(void);
init_fnc_t init_sequence[] =
{
"board_init",
...
NULL,
};
int board_init(void)
{ ...
return ***;
}
使用init_sequence[0]()调用board_init()函数;
下面就这样定义:
init_fnc_t *init_fnc_ptr;
init_fnc_ptr = init_sequence;
(*init_fnc_ptr)();
4.指针与数组、函数指针:
指针数组:数组内容为指针---->int *p[];其中p为数组名
数组指针:指向数组的指针---->int (*p)[];其中p为指向数组的指针
指针函数:返回值为指针--->void *fun(void);其中fun为函数名。
函数指针:指向函数的指针---->void (*pfunc)(void );其中pfunc为指向函数的指针。
函数指针数组:数组内容为函数指针--->void (*pfunc[5])(void);其中pfunc为数组名。
函数指针数组指针:指针指向数组,数组内容为函数指针--->void ((*(*pfunc)[2]))(void) ;其中pfunc指针,指向数组。
阅读(618) | 评论(0) | 转发(0) |