博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数组和指针
阅读量:6456 次
发布时间:2019-06-23

本文共 834 字,大约阅读时间需要 2 分钟。

hot3.png

越是基础的东西,越容易犯错.

首先看下第一版程序的代码:

#include 
using namespace std;bool string_reverse(char* p, int length);int main(){ char* test = "1234567"; cout << test << endl; string_reverse(test, strlen(test)); cout << test << endl; return 0;}bool string_reverse(char* p, int length){ int len = strlen(p); if (len > length) { len = length; } char* q = p + strlen(p) - 1; while (q > p) { char temp; temp = *p; *p = *q; *q = temp; -- q; ++ p; } return true;}

编译没问题,运行出错,内存不能访问.这是什么原因呢.

我又重新看了一遍程序,发现有个地方好像不对:

char* test = "1234567";//这个地方,为什么我用的是字符常量呢?

改成字符数组试试

char test[] = "1234567";

编译运行,正确执行.好了现在说明下char * test和char test[]

char message1[] = "Hello";char* message2 = "Hello";

看上去两者很像但是有不同的含义:

前者是一个字符串数组,后面是一个真正的字符串常量.这个指针变量被初始化为指向这个字符串常量的存储位置.

211645_tiSy_252615.jpg

然而字符串常量是不可以改变的,因此那样当参数传递进去之后会出现错误.

转载于:https://my.oschina.net/zhaomengit/blog/194838

你可能感兴趣的文章
又来勒索,有完没完 - 数据库安全指南
查看>>
机器学习——随机森林算法及原理
查看>>
java线程间通信[实现不同线程之间的消息传递(通信),生产者和消费者模型]
查看>>
关于Excel导入的问题记录
查看>>
java一些基础问题(听说是java应聘者老被问的问题!)
查看>>
对Windows Server 2008上的ARP缓存进行管理的步骤
查看>>
linux shell 实用小实例
查看>>
JavaScript面向对象
查看>>
curl sh带参数运行
查看>>
CSS优化
查看>>
关于Linux积累的相关博客
查看>>
自动拆装箱【简】
查看>>
ceph-deploy源码制作rpm包 <转>
查看>>
ElasticSearch客户端注解使用介绍
查看>>
UITableView 抽取及控制器的调用整合
查看>>
Hadoop HA高可用集群模式搭建指南
查看>>
我的友情链接
查看>>
tomcat自动发布脚本
查看>>
java关键字strictfp的用途
查看>>
表格移动到指定的cell
查看>>