编写高性能c/c++程序-面试指南(二)指针

指针数据



指针本质:就是一个存储地址的容器.

【提示】编译器 解析的时候 * 后面的指针类型结合 int *a,b,那么a是指针,b 还是一个变量;

 int *a,b;

[规则]:不管是全局的还是局部的,静态或非静态指针变量,都要在声明的时候进行赋值初始化,要么为NULL;

指针运算
1.指针自增(++),前一个元素
2.指针自减(–),后一个元素
3.指针加一个正整数,前进i个元素
4.指针减一个正整数,退后i个元素
5.两个同类型指针相减,它们之间元素个数之和
6.指针赋值,把指针赋值给另一个指针。
7.指针比较 ,最常用的 ==,!=
8.取地址(&)和反引用(*)。
【提示】:指针的加减,并不是普通的加减还要加上指针所指字节信息;

 int a = 1;
 int p = &a;
 printf("%d",p+1);  // 编译器改为 p +  (1 * siezof(int) )

【提示】:
1.&指针,不可以重复多次 &&
2.指针 ,取指的时候要确保指针的正确性,(例如野指针情况),不能对void类型 用*取值。

本质:指针传递其实就是传的这个这个容器的地址,不是指向的地址;
【提示】:指针在函数之间传递,要保持数据指向有效性和正确单元,内存被释放还在用该指针,传局部变量;

void funC(char *& p)   // &p 是P本身的地址 0x00011
{
	p = (char*)malloc(10); // p 0x00022 p所指向的内存地址
} 
int main()
{
	char *str = NULL;
	funC(str); // 0x00011
	strcpy_s(str, 6, "hello");
	std::cout << str << std::endl;
	free(str);  
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值