Chinaunix首页 | 论坛 | 博客
  • 博客访问: 42852
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 330
  • 用 户 组: 普通用户
  • 注册时间: 2015-07-28 17:39
文章分类
文章存档

2015年(31)

我的朋友

分类: C/C++

2015-10-29 13:12:04

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) |
0

上一篇:typedef

下一篇:协处理器cp15

给主人留下些什么吧!~~