一道常见题

    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型指针与其它指针或数组的细节的更多相关文章

  1. char型字符串(数组)与string型字符串 指针与引用

    一.常指针: int *const p;    //指针不可改变,但是指针指向的数据可以改变. 指向常量的指针: const int *p;    //指针可以改变,但是指针指向的数据不可以改变. 指 ...

  2. char型指针和字符串字面量和字符数组

    1.当一个char型指针指向一个字符串字面量(也就是常量字符串)时,该指针必须由const修饰,否则,系统会给出deprecated(不赞成)的警告.原因是:字符串字面量不可改变,当它被一个非cons ...

  3. char型指针的初始化问题

    方法一:char *str = “abcd“区别在于你这里赋给str的是一个常量字符串,存储在静态全局区,因此str也成了一个指向常量的指针,不能通过指针对常量内容做任何更改,例如*(ch+2)='y ...

  4. Z :彻底了解指针数组,数组指针以及函数指针 [复

    原创 :彻底了解指针数组,数组指针以及函数指针 [复制链接] 00 roking 白手起家 帖子 60 主题 16 精华 0 可用积分 74 专家积分 0 在线时间 0 小时 注册时间 2003-10 ...

  5. 《C专家编程》数组和指针并不同--多维数组

    <C专家编程>数组和指针并不同 标签(空格分隔): 程序设计论著笔记 1. 背景理解 1.1 区分定义与声明 p83 声明相当于普通声明:它所说明的并不是自身,而是描写叙述其它地方创建的对 ...

  6. C语言指针系列 - 一级指针.一维数组,二级指针,二维数组,指针数组,数组指针,函数指针,指针函数

    1. 数组名 C语言中的数组名是一个特殊的存在, 从本质上来讲, 数组名是一个地址, 我们可以打印一个指针的值,和打印一个数组的值来观察出这个本质: int nArray[10] ={ 0 }; in ...

  7. CPP-基础:函数指针,指针函数,指针数组

    函数指针 函数指针是指向函数的指针变量. 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整型变量.字符型.数组一样,这里是指向函数.如前所述,C在编译时,每一个 ...

  8. C++入门经典-例6.14-通过指针连接两个字符数组

    1:字符数组是一个一维数组,引用字符数组的指针为字符指针,字符指针就是指向字符型内存空间的指针变量. char *p; char *string="www.mingri.book" ...

  9. C语言基础:指针类型与指针和数组、字符串的关系

    //指针变量就是用来存储地址的,只能存储地址 格式:  int  *p;  这个p为指针变量:指针变量占8个字节 类型是用来说明这个指针指向的类型: 比如上边的int代表这个指针变量会指向int类型的 ...

随机推荐

  1. Android 时间轴

    最近开发的app中要用到时间轴这东西,需要实现的效果如下: 想想这个东西应该可以用listview实现吧.然后最近就模拟着去写了: 首先写  listview的item的布局: listview_it ...

  2. uploadify+批量上传文件+java

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  3. PHP 对象和数组互相转换

    最简单的:$array = (array)$object; 但是, 如果对象的属性也是个对象的话, 就转换不了了, 就是说PHP的强制类型转换不能把对象属性中的对象转换成数组的下一个维度的数组, 刚刚 ...

  4. ExtJs布局大全

    1.Fit 布局 在Fit 布局中,子元素将自动填满整个父容器.注意:在fit 布局下,对其子元素设置宽度是无效的.如果在fit 布局中放置了多个组件,则只会显示第一个子元素.在Fit 布局中,子元素 ...

  5. html5 移动端单页面布局

    序     移动端的web网页使用的是响应式设计,但一般我们看到的网站页面都是跳转刷新得到的,比如通过点击一个menu后进入到另一个页面 今天来说下是移动端的单页面的布局.单页面就是一切操作和布局都是 ...

  6. matlab函数集锦

    matlab函数集锦 matlab函数集锦ISFINITE(X), ISINF(X), or ISNAN(X)pwd 当前目录eval 执行matlab函数CONV2(  ,'same')  卷积F  ...

  7. 什么是PHP Guzzle?

    Guzzle是一个使得利用PHP实现发送HTTP 请求,方便和web service集成的PHP 客户端模拟组件.一句话,它就像一个PHP写的浏览器.当你的服务端程序需要作为客户端来访问其他的serv ...

  8. github概念和实战

    fork: 通过fork操作,你将拥有了别人创建的repo的ownership,但是url却变成了/youraccount/repo,这时你将可以做git push操作 clone: 该命令是直接将r ...

  9. HDU 2610 (自己完全找不到思路) Sequence one

    搜索虐我千百遍,我待搜索...好吧,我还木有初恋 题意: 我开始理解题意就理解偏了,Orz 题中有n个元素构成的序列,求出前p个非递减子序列.子序列是先按长度排序的,然后按原序列先后位置排序的. 这里 ...

  10. volley(3) 参数{or_barcode:or_barcode,or_remai:or_remain, bar_remain:bar_remain} method:POST

    1. 来自于WHCombineBatchFragment.java/** * 分拆按钮点击事件,获取数据,同时获取popupWindow的数据 */private void breakingBtnCl ...