char型指针与其它指针或数组的细节
一道常见题
char * str7="abc";
char * str8="abc";
cout<<(str7==str8)<<endl;
输出结果为1,
cout<<str7<<endl;
的输出结果是abc,这与整型指针等结果不同,而且初始化方式也不同
int i=;
int * ip=&i;
cout<<ip<<endl;
cout<<*ip<<endl;
整型指针的初始化必须用这种形式,而且输出ip的结果时i的地址,*ip的输出结果是i的值5。
二者的初始化方式不同,从《C++程序设计(谭浩强)》第6章的相关知识可以了解到,字符串数组增加了一中初始化方式。:
int i[];
i[]=;
i[]=;
int * ip=i;
cout<<ip<<endl;
cout<<&i<<endl;
cout<<*ip<<endl;
二者有一个共同点是:char * p和int * ip,它们本身是一个变量,是用来存储内容,只是存储的是地址,
当p和ip都指向数组的时候,相同点是接引用后都是输出第一个元素,不同点是直接cout没有*操作符是,p的结果时字符串的内容,而ip的结果是数组的地址
在执行cout输出流时,每输出一个字符之前先检查一下,看它是不是‘\0’,如果是'\0'就停止输出。——《C++程序设计(谭浩强)》150页
2014-05-13
从下面这一段代码观察调试结果:
char * str7="abc";
char * str8="abc";
char * str9="abc";
char * str10="ab";

可以发现,当使用相同的字符串“abc”给不同的指针初始化的时候,这些指针中保存的地址是相同的,都是0x00f478a0,但当使用另一个字符串“ab”初始化char型指针的时候,结果则不同,但类似于str7本身是一个变量,它本身的地址及&str7与其它变量的地址是不同的。不知道内存具体的存储方式,不过可以理解为同一个字符串被存放在内存中同一个临时变量或者临时字符数组中或者,相等的常量字符串被存放在同一个地方,当使用str7、str8等的指针执行它们时,值是相同的
当使用char型数组的时候会直接将字符串“abc”存放在数组中,如果有定义了str1和str2两个char型数组,则开辟两个数组空间,两个数组地址是不同的,只是存放的内容都是“abc”,如下所示:
char str1[]="abc";
char str2[]="abc";

另外,如下这种形式就有问题,
char * str7="abc";
应该用
const char * str7="abc";
char型指针与其它指针或数组的细节的更多相关文章
- char型字符串(数组)与string型字符串 指针与引用
一.常指针: int *const p; //指针不可改变,但是指针指向的数据可以改变. 指向常量的指针: const int *p; //指针可以改变,但是指针指向的数据不可以改变. 指 ...
- char型指针和字符串字面量和字符数组
1.当一个char型指针指向一个字符串字面量(也就是常量字符串)时,该指针必须由const修饰,否则,系统会给出deprecated(不赞成)的警告.原因是:字符串字面量不可改变,当它被一个非cons ...
- char型指针的初始化问题
方法一:char *str = “abcd“区别在于你这里赋给str的是一个常量字符串,存储在静态全局区,因此str也成了一个指向常量的指针,不能通过指针对常量内容做任何更改,例如*(ch+2)='y ...
- Z :彻底了解指针数组,数组指针以及函数指针 [复
原创 :彻底了解指针数组,数组指针以及函数指针 [复制链接] 00 roking 白手起家 帖子 60 主题 16 精华 0 可用积分 74 专家积分 0 在线时间 0 小时 注册时间 2003-10 ...
- 《C专家编程》数组和指针并不同--多维数组
<C专家编程>数组和指针并不同 标签(空格分隔): 程序设计论著笔记 1. 背景理解 1.1 区分定义与声明 p83 声明相当于普通声明:它所说明的并不是自身,而是描写叙述其它地方创建的对 ...
- C语言指针系列 - 一级指针.一维数组,二级指针,二维数组,指针数组,数组指针,函数指针,指针函数
1. 数组名 C语言中的数组名是一个特殊的存在, 从本质上来讲, 数组名是一个地址, 我们可以打印一个指针的值,和打印一个数组的值来观察出这个本质: int nArray[10] ={ 0 }; in ...
- CPP-基础:函数指针,指针函数,指针数组
函数指针 函数指针是指向函数的指针变量. 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整型变量.字符型.数组一样,这里是指向函数.如前所述,C在编译时,每一个 ...
- C++入门经典-例6.14-通过指针连接两个字符数组
1:字符数组是一个一维数组,引用字符数组的指针为字符指针,字符指针就是指向字符型内存空间的指针变量. char *p; char *string="www.mingri.book" ...
- C语言基础:指针类型与指针和数组、字符串的关系
//指针变量就是用来存储地址的,只能存储地址 格式: int *p; 这个p为指针变量:指针变量占8个字节 类型是用来说明这个指针指向的类型: 比如上边的int代表这个指针变量会指向int类型的 ...
随机推荐
- Spring Boot MyBatis 通用Mapper插件集成
Mybatis在使用过程中需要三个东西,每张表对应一个XXMapper.java接口文件,每张表对应一个XXMapper.xml文件,每张表对应一个Entity的Java文件. 其中XXMappe ...
- linux 僵死进程
僵死进程简而言之就是:子进程退出时,父进程并未对其发出的SIGCHILD信号进行适当处理,导致子进程停留在僵死状态等待其父进程为其收尸,这个状态下的子进程就是僵死进程. 在fork()/execve( ...
- 操刀 requirejs,自己动手写一个
前沿 写在文章的最前面 这篇文章讲的是,我怎么去写一个 requirejs . 去 github 上fork一下,顺便star~ requirejs,众所周知,是一个非常出名的js模块化工具,可以让你 ...
- guidelines for contributing Hearthstone-Deck-Tracker
https://github.com/Epix37/Hearthstone-Deck-Tracker/blob/master/CONTRIBUTING.md Coding style Always u ...
- 巧用ifstream判断文件是否存在
最近在写手写数字的识别软件,训练样例数量巨大而且数字个数不唯一,有可能在中途粘出一部分做测试样例.因此写下面的脚本来获取文件名,之后丢到训练函数里. #include <algorithm> ...
- JSON 之 SuperObject(2): 构建方式与 AsJSon
SuperObject 构建一个 JSON 的常用方法: 从字符串.从文件.从流. unit Unit1; interface uses Windows, Messages, SysUtils, ...
- Shadow mapping
http://www.cnblogs.com/cxrs/archive/2009/10/17/1585038.html 1.什么是Shadow Maping? Shadow Mapping是 ...
- staging server, source congtrol, deply workflow using git
web项目开发中,有三个实践对于项目成功是非常重要的: 1. staging servers 2. Version control workflows 3. Tested, repeatable de ...
- tomcat启动出错(转)
刚刚装载好的myeclipse 在添加项目到服务器的时候,突然异常涌现. 其实这是一个新手常见的错误.平常配置JDK环境的时候有些人习惯把JDK安装到磁盘的当前文件夹里,这样十分的方便,但是安装时,你 ...
- POJ 2369 Permutations
傻逼图论. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm& ...