计算机系统应用教程网站

网站首页 > 技术文章 正文

C/C++ 指针基本用法总结

btikc 2024-09-12 12:07:10 技术文章 12 ℃ 0 评论

声明:

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”获取素材资料以及开发工具和听课权限哦!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表