1、指针
int i = 5;
int *p = &i;
void *swap(void *x, void *y)
{
...
}
指针变量p存储变量i的地址
void *通用类型指针,常用作函数的参数和返回值
2、指针和数组
int a[10];
int *p = &a[0];
p++;
指针p指向a[0]的地址,而不是a的地址,通常这么写
int a[10];
int *p = a;
p++;
指针运算
*(p+2)等价于a[2]
3、指针与const限定符
const int *a;
int const *a;
int * const b;
int * const *c;
a是一个指向const int型的指针
b是一个指向int型的const指针
c是一个指向const int型的const指针
注意,如果要定一个指针指向字符串字面值,应该定义为const char *型
4、指针和结构体
struct unit{
char c;
int num;
};
struct unit u;
struct unit *p = &u;
定义结构体如上,可以通过p->c、p->num来访问
5、指向指针的指针
int i;
int *p = &i;
int **pp = &p;
int ***ppp = &pp;
6、指针数组和指向数组的指针
int *a[10];
int (*b)[10];
a是一个数组,元素是int型指针
b是一个指针,指向一个int型数组
7、函数指针
函数指针,是指向函数的指针,存放的是函数的入口地址
#include <stdio.h>
void say_hello(const char *str)
{
printf("Hello %s\n", str);
}
int main(void)
{
void (*f) (const char *) = sayhello;
f("friends");
return 0;
}