下面介绍几个指针中比较容易混淆的概念。
函数指针
本身是指针,比较的特殊,其指向函数的入口。
C 语言在编译的时候,会对每一个函数在内存中分配一个入口地址,该入口地址就是函数指针所指向的地址。
定义 类型 (*p)()
示例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 交换值
void swap(int *a, int *b)
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
int main(void)
{
void (*p)() = NULL;
p = getMax; // 函数名表示函数的指针
int a = 1, b = 2;
printf("src:%d - %d\n", a, b);
(*p)(&a, &b); // 这种写法比较容易区别
// p(&a, &b); // 也可以这样写
printf("res:%d - %d\n", a, b);
return 0;
}
指针函数
本身是函数,返回值为指针,这个概念比较好理解。
类型 *函数名(参数列表…)
示例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 返回最大值的指针
int *getMax(int *a, int *b)
{
if (*a > *b) {
return a;
}
return b;
}
int main(void)
{
int a = 1, b = 2;
int *max = getMax(&a, &b);
printf("max :%d\n", *max);
return 0;
}
指针常量
指针是形容词,常量是名词。这回是以常量为中心的一个偏正结构短语。那么,指针常量的本质是一个常量,而用指针修饰它,那么说明这个常量的值应该是一个指针。
指针常量的值是指针,这个值因为是常量,所以其指针指向不能改变,但指向的值可以修改。
int *const p;
1 |
|
常量指针
常量是形容词,指针是名词,以指针为中心的一个偏正结构短语。这样看,常量指针本质是指针,常量修饰它,表示这个指针乃是一个指向常量的指针(变量)。
指针指向的对象是常量,那么这个对象不能被更改,但是指针的指向是可以修改的。
int const *p;
1 |
|
上面的几个概念比较容易混淆,那么比较好记的方法就是,他们的偏重点就在后面两个字名词上面,这样就记住了。
©版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 & 作者信息。
End