指针面试题(3)

这是一篇关于指针的面试题集,包括三道题目。每道题都提供了画图分析,帮助理解内存分布,并附有运行结果。文章强调了画图分析对于初学者解决这类问题的重要性。
摘要由CSDN通过智能技术生成

第1题

#include<stdio.h>
int main()
{
	int aa[2][5] = {1,2,3,4,5,6,7,8,9,10};
	int *ptr1 = (int*)(&aa + 1);//&aa 取出整个数组的地址 &aa+1 取出数组的地址然后跳过整个二维数组
	int *ptr2 = (int*)(*(aa + 1));//(aa+1)==aa[1] 第二行的地址
	                            //aa 数组名  数组名是首元素地址 所以aa是第一行的地址
	                            //*(aa+1)跳过第一行的地址,然后解引用
	printf("%d,%d", *(ptr1 - 1), *(ptr2 - 1));//10 5 
	//*(ptr1 - 1)向前移动一位
	//*(ptr2 - 1)向前移动一位
	return 0;
}

画图分析:

 运行结果:

第2题

本题是曾经阿里巴巴的面试真题,坑有点多,请不要自闭!

#include
好的,下面列举几道 C++ 指针面试题供参考。 1. 指针和引用有什么区别? 指针和引用都可以用来访问内存中的变量,但是它们有以下几点区别: - 指针可以被赋值为 `nullptr`,而引用不行。 - 指针可以在运行时指向不同的变量,而引用在声明时就必须绑定到一个变量上,并且不能更改绑定的变量。 - 指针可以进行算术运算和解引用操作,而引用不能。 - 指针可以被重新赋值为指向不同类型的变量,而引用必须与原始变量类型匹配。 2. 指针和数组有什么关系? 指针和数组有着紧密的关系,因为数组名其实就是数组首元素的地址。例如,下面的代码定义了一个数组并初始化: ```c++ int arr[] = {1, 2, 3, 4, 5}; ``` 可以通过下标访问数组元素,也可以通过指针访问数组元素。例如,下面的代码使用指针访问数组元素: ```c++ int* p = arr; for (int i = 0; i < 5; i++) { cout << *(p + i) << " "; } ``` 这里的 `p` 是一个指向 `int` 类型的指针,它指向数组 `arr` 的首元素。在循环中,我们通过指针访问数组元素,其中 `*(p + i)` 表示指针 `p` 加上 `i` 个偏移量后所指向的元素。 3. 如何避免空指针引用? 空指针引用是一种常见的程序错误,可以通过以下几种方式避免: - 在使用指针之前,先将其初始化为 `nullptr`。 - 在使用指针之前,先进行空指针判断。 - 使用智能指针,可以自动管理指针的生命周期,并且可以避免空指针引用。 例如,下面的代码演示了如何进行空指针判断: ```c++ int* p = nullptr; if (p != nullptr) { *p = 10; } ``` 在这个示例代码中,我们先将指针 `p` 初始化为 `nullptr`,然后在使用指针之前,先进行空指针判断。由于 `p` 是空指针,所以不会执行赋值操作,从而避免了空指针引用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易点点心动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值