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类型的 ...
随机推荐
- USACO Section 3.1: Agri-Net
minimal spanning tree的经典题 /* ID: yingzho1 LANG: C++ TASK: agrinet */ #include <iostream> #incl ...
- 用任务管理器画CPU正弦曲线
这个最初是在microsoft的<编程之美>中看到的,用你的程序来控制CPU的使用率. 首先是要求写一个用来实现CPU使用率为50%程序. 这个还是很好实现的,只要让你的程序忙的时间课空闲 ...
- 浅谈Linux下的五种I/O模型
一.关于I/O模型的引出 我们都知道,为了OS的安全性等的考虑,进程是无法直接操作I/O设备的,其必须通过系统调用请求内核来协助完成I/O动作,而内核会为每个I/O设备维护一个buffer.如下图所 ...
- 索引 split2
当往一个已经满了的索引块中插入新的索引条目时,将发生索引块的split,在9i下,分两种不同的情况进行split: (1)如果插入的索引键值不是最大的,将发生50-50的split,也就是说有bloc ...
- 《c程序设计语言》读书笔记--首次输入不能是空符;最多10个字符
#include <stdio.h> #define Num 10 int main() { int wor = 0; int arr[Num] = {0}; int c,count = ...
- win7下制作ubuntu系统安装启动盘和U盘安装ubuntu全过程
在我搞坏了两个系统之后,一切都得从头开始了,这回好了,电脑就是一台裸机了.没办法,重新下win7吧.这个要先做一个win7的启动盘,然后再安装,只能说我技术不行,没能把win7搞定.让大神给装的win ...
- hdu - 1240 Nightmare && hdu - 1253 胜利大逃亡(bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1240 开始没仔细看题,看懂了发现就是一个裸的bfs,注意坐标是三维的,然后每次可以扩展出6个方向. 第一维代表在 ...
- mongodb unset/set 删除/增加字段
删除全部文档的name字段 db.users.update({},{$unset: {"name":""}},{nulti:true}) 增加全部文档的name ...
- 通过外网IP访问内网
外网服务器:外网IP1,内网IP192.168.2.156 内网服务器:内网IP192.168.2.206 通过访问外网服务器8083端口,转发到内网服务器的8083端口. 在外网服务器设置映射规则: ...
- HDU 2063 (匈牙利算法) 过山车
有m个妹子和n男生,男生和女生之间互相有好感则连一条线,问最多能撮合出多少对 这篇博文写的很好,没有让人望而生畏的图论术语 http://blog.csdn.net/dark_scope/articl ...