一道常见题

    char * str7="abc";char * str8="abc";cout<<(str7==str8)<<endl;

输出结果为1,

    cout<<str7<<endl;

的输出结果是abc,这与整型指针等结果不同,而且初始化方式也不同

    int i=5;int * ip=&i;cout<<ip<<endl;cout<<*ip<<endl;

整型指针的初始化必须用这种形式,而且输出ip的结果时i的地址,*ip的输出结果是i的值5。
二者的初始化方式不同,从《C++程序设计(谭浩强)》第6章的相关知识可以了解到,字符串数组增加了一中初始化方式。:

    int i[2];i[0]=5;i[1]=6;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";

转载于:https://www.cnblogs.com/tingshuixuan2012/p/3723766.html

char型指针与其它指针或数组的细节相关推荐

  1. c语言char数组和short数组的区别,详解C语言中Char型指针数组与字符数组的区别

    详解C语言中Char型指针数组与字符数组的区别 详解C语言中Char型指针数组与字符数组的区别 1.char 类型的指针数组:每个元素都指向一个字符串,指向可以改变 char *name[3] = { ...

  2. c语言怎么让写的函数兼容int型和char型_既然C语言void指针是“万能指针”,那么malloc还需类型转换吗?...

    在C语言程序开发中,动态内存分配是不可避免的,而调用 malloc()/free() 库函数实现这一过程是方便的,事实上,在很多C语言程序中,malloc/free 库函数的使用相当频繁,它俩的C语言 ...

  3. C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)

    1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...

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

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

  5. 指针数组,数组指针,指针函数,函数指针,二级指针详解

    先看个简单的:char *p,这定义了一个指针,指针指向的数据类型是字符型,char  *(p)定义了一个指针P: char *p[4], 为指针数组,由于[]的优先级高于*,所以p先和[]结合,p[ ...

  6. 用指针来表示二维数组的方法

    1.类型说明 int *b;  //定义一个int型指针变量 int *p[3];   //定义一个int型指针数组的变量 int (*c)[3]  和  int (*)[3]:   //定义一个指向 ...

  7. 出参传递数组指针_C语言指针重难点详解

    1为什么使用指针 假如我们定义了 char a='A' ,当需要使用 'A' 时,除了直接调用变量 a ,还可以定义 char *p=&a ,调用 a 的地址,即指向 a 的指针 p ,变量 ...

  8. 指针数据类型 java_C/C++ 指针的小结——指针与其它数据类型(数组、字符串、函数、结构体)的关系...

    一.指针与数组和字符串 1.指针与数组 当声明数时,编译器在连续的内存空间分配基本地址和足够的储存空间,以容纳数组的所有元素.基本地址是数组第一个元素(索引为0)的存储位置.编译器还把数组名定义为指向 ...

  9. C 温故知新 之 指针:数组指针、字符串指针、函数指针

    一.数组指针  1.指向数组元素的指针 1.定义:还是那句话通俗的说指针就是地址 数组指针     :数组的起始地址 数组元素指针:数组元素的地址 2.定义一个指向数组元素的指针变量的方法,与之前介绍 ...

  10. 【C语言】指针进阶 - 指针数组 数组指针 数组指针传参 函数指针 指向函数指针数组的指针

    目录 一.字符指针 一道题 二. 指针数组 解引用打印数组元素 &数组名 数组名 字符指针初始化 三.数组指针 取数组地址-放在数组指针里 类型 数组指针的使用 二维数组传参 判断 四.数组参 ...

最新文章

  1. 第七篇 JVM核心机制之JVM运行和类加载全过程(二)
  2. Java中传参数--值传递和引用传递
  3. Docker - Tips
  4. 如何在ppt下面加入讲解内容_学术展示系列:学术PPT教程(下)内容 讲解
  5. Android中将布局文件/View添加至窗口过程分析 ---- 从setContentView()谈起
  6. Bzoj3261 最大异或和
  7. MQTT协议通俗讲解
  8. 在K8S上的Web服务该怎么做域名解析呢?
  9. Scrapy Learning笔记(四)- Scrapy双向爬取
  10. java三个整型变量_初值自定义.if按由小到大的顺序输出这三个数_C语言实现3个数从小到大排序/输出的方法示例...
  11. 网络流24题-骑士共存问题
  12. 欧姆龙cp1h指令讲解_欧姆龙CP1H-XA40DT-D手册CP1H-XA40DT-D参考手册通信指令 - 广州凌控...
  13. 迅雷,暴风影音,QQ这些软件是什么工具和语言编的?
  14. Swift - 实现公历、农历日期之间的相互转换
  15. html放大镜小图标,图片放大镜jquery.jqzoom.js使用实例附放大镜图标
  16. 澳洲航空和香港航空在OAG的准点率报告中获得五星评级
  17. windows 多用户使用谷歌浏览器
  18. python爬取古诗文网站诗文一栏的所有诗词
  19. EAS中的EAS License与Apusic的License区别
  20. Google面试题 图论的问题

热门文章

  1. 「翻版王攀」?深大研究生控诉导师不让毕业:读研三年,猪狗不如
  2. 文本分类和意图识别调研思考
  3. 哈工大刘铭:开放式知识图谱的自动构建技术
  4. 第十七届全国机器翻译大会(CCMT 2021) 征文延期通知
  5. 【基础】优化背后的数学基础
  6. 【AAAI会议】三位教父上演神仙打架,Hinton吐槽CNN就是个“垃圾”
  7. 【每日算法Day 103】老题新做,几乎不会有人想到的解法,它来了
  8. 深入理解成分句法分析中的Dynamic Oracle
  9. matplotlib-plt.title
  10. 揭秘Harbor镜像仓库——首个源自中国的CNCF毕业项目