声明:
TYPE *p (TYPE * p 和 TPYE* p 和 TYPE*p 都可以),* 号两边有无空格均可以,推荐第一种写法;
赋值:
既可以在声明的时候赋值,也可以在后期赋值,不要让没有赋值的野指针出现。指针不可以直接赋值常量,如 p=100 , 这时 *p 就会出错。
空类型指针和指向空的指针
空类型指针可以接受任何类型指针,使用时将其强制转化为对应的数据类型即可。如:void *p;强转int型指针,(int*)p;
指向空:int *p = NULL;
常量指针和指向常量的指针
常量型的指针: int * const p=&a, p 是常量,指向不能改,声明时得初始化,*p 可以改;
指向常量的指针:int const *p (同const int *p), *p 是常量,p可以改,不能通过*p来修改指向的内容;
指向常量的常量指针:int const * const p =&a(同 const int * const p=&a), *p 和 p 都是常量;
总结:* 操作符是左操作符,左操作符的优先级是从右到左。所以:
如果const 修饰在*p前则 *p 不可变;
如果const直接写在p前则 p 不可变;
指向常量的指针:
/* 指向常量的指针 */ #include<iostream> using namespace std; int main() { int a = 2; int const *p; //等价于const int *p; p = &a; cout << p << endl; int b = 3; p = &b; //p仍可更改 cout << p << endl; b = 5; //*p=6; 编译错误,因为 不能通过*p来修改内容 cout << *p << endl; }
输出:
0x28fed8 0x28fed4 5
常量型的指针:
/* 指针常量,常量型的指针 */ #include<iostream> using namespace std; int main() { int a = 2; int * const p = &a; //必须初始化,否则编译不过 cout << p << endl; int b = 3; //p = &b;本行错误,不能再给p赋值 *p=3; cout<<a<<endl; }
输出:
0x28fed4
3
函数指针与指针函数
函数指针指向函数内存的指针,一个函数编译时被分配给一个入口地址,可以用一个指针变量指向函数,然后通过指针变量调用次函数。
用例: int add(int x,int y);
int (*p_f)(int,int); 或 int (*p_f)(int x,int y); 注意小括号
指针函数指返回值是指针的函数,定义: TYPE * 函数名(参数列表);
函数指针:
#include<stdio.h> int add(int a, int b); void show(); int main() { int (*pf)(int, int); // 等价于 int (*pf)(int a, int b); /* 函数指针变量的声明格式类似于函数声明,把名称换成(*p_fun)即可 */ pf = add; // 等价于 pf = &add; int c = (*pf)(2, 3); printf("%d\n", c); show(); // 等价于(*show)(),show其实是其入口地址,相当于函数指针常量; void (*fs)() = show; (*fs)(); return 0; } int add(int a, int b) { return a + b; } void show() { printf("show\n"); }
输出:
5 show show
最后,如果你想学C/C++可以私信小编“01”获取素材资料以及开发工具和听课权限哦!
本文暂时没有评论,来添加一个吧(●'◡'●)