指针:指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。我们可以通过这个指针来访问该地址存储的值
int a = 10;
int *p;
p = &a; // p存储了变量a的地址
printf("%d", *p); // 这会打印出10,因为p指向了a的地址
在这个例子中,*
是解引用运算符,用来获取指针指向的值。
函数指针:函数指针是指向函数的指针。换句话说,它是一个指针,其值为一个函数的地址。我们可以使用函数指针来调用函数,或者将函数作为参数传递给其他函数。
int add(int a, int b) { return a + b;
} int (*func_ptr)(int, int); // 定义了一个函数指针
func_ptr = add; // 把add函数的地址赋值给func_ptr
printf("%d", func_ptr(10, 20)); // 这会打印出30,因为func_ptr指向了add函数
在这个例子中,我们创建了一个指向add
函数的函数指针func_ptr
,然后使用该指针调用了add
函数。
总的来说,指针和函数指针的主要区别在于它们指向的对象类型不同:指针指向的是变量(通常是其他变量、数组元素或对象的一部分),而函数指针指向的是函数。