c++中指针的例子/上海擎朗智能面试题

今天去了擎朗智能面试,面试问到了很多指针的题,整理一下。

1.下面程序有没有错,有的话是什么错?

void test()
{
    char* str ="Linux";
	*str = 'T';
		
	printf("%s", str);
}

在c++中,vs2019中将“linux”初始化char*会报错,“linux”是const char*不能转为char*

改正的话,先将“linux”保存在一个数组中,用指针指向这个数组。如下所示,则会有如下输出:

void test()
{
    char temp[]="Linux";
	char* str = temp;
	*str = 'T';
		
	printf("%s", str);
}

2.strcpy()函数中如果拷贝的字符串没有那么大的内存空间会怎么样?比如下面这个例子:

void test()
{
    char temp[]="Linux";
	char* str;
	str = (char*)malloc(1);
	char aa[]="hello word";
		
		
	strcpy(str, aa);
	printf("%s", str);
}

用vs2019进行了测试,会输出hello word但是会报错,显示已引发异常,触发一个断点。

3.下面的程序将会输出什么?

void test()
{
    char aa[]="hello word";
	
	strcpy(str, aa);
	free(str);
	if (str != NULL)
	{
		printf("%s", "biubiubiu");
	}
}

会输出

因为free释放掉str所指向的内存后,如果没有将str指向NULL,那么str仍然指向原来的内存,只不过原来内存中的东西被释放掉了,内存的所有权也已经被系统回收。这时候再打印str中的内容,将会是不确定的,可能有些编译器仍然将原来的数据保存下来了,这时候我们仍能够打印出hello word,也有可能里面的东西被释放掉了,这时候再打印可能就是乱码,但如果再往str里写入数据,仍然是能够写入的,如再往str所指向的地址复制一串字符串:

void test()
{
    char aa[]="hello word";
	char bb[] = "ahhhh";
		
	strcpy(str, aa);
	free(str);
	strcpy(str, bb);
	printf("%s", str);
	cout << endl;
	if (str != NULL)
	{
		printf("%s", "biubiubiu");
	}
}

仍然是能够实现的,只不过系统再进行其他操作的时候可能也会用到p这一块内存,这时候p中原有的数据就会被覆盖掉,也可能造成内存溢出。因此,我们释放掉内存后,最好能够将原来指向这块内存的指针指向NULL,防止为以后的编程带来麻烦。

 

 

还有一些题想不起来了,整体来说更偏向字符串和内存分配方面的内容。

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值