【C++】char* 和 char[] 区别的理解
string 是一个类,其中有一个 char * 类型的私有变量。 因此可以如下构建一个string类型的变量。
string str = "abcd";
其中,右值“abcd”一个字符串,存储在常量区的连续内存中,以 '\0' 作为结束标志位,返回一个指向该段内存起始位置的 char * 指针。通过重载赋值运算符 = ,可以使用 char * 类型变量给str赋值。
https://blog.csdn.net/u012611878/article/details/78291036
char a[] = "ABC"; // return char *, in stack
char b[] = {'A', 'B', 'C', ' '}; // return char *, in stack const char* c[] = {"A","B"}; // return (const char *)*, for example int v[10] = {1},return int * const char *d = "ABC"; cout << "In constant area :" << (void*)"ABC" << endl;
cout << "In stack area :" << (void*)a << endl;
cout << a << endl;
cout << a[] << endl;
cout << sizeof(a)/sizeof(char) << endl;
cout << "********************" << endl; cout << "In stack area :" << (void*)b << endl;
cout << b << endl;
cout << b[] << endl;
cout << sizeof(b)/sizeof(char) << endl;
cout << "********************" << endl; cout << c << endl;//void*
cout << c[] << endl;
cout << sizeof(c)/sizeof(c[]) << endl;
cout << "********************" << endl; cout << "In constant area :" << (void*)d << endl;
cout << d << endl;
cout << *d << endl;
cout << d[] << endl;
cout << sizeof(d)/sizeof(d[]) << endl;
由于C++重载输出运算符 << ,把 char * 类型的变量当做字符串变量。于是当遇到 char * 类型的变量时,输出指针指向的内容。如果想输出 char * 变量的地址,必须使用强制类型转换,把字符指针转换为无类型指针。
const char * m_data = "abcd";
cout << static_cast<const void *>(m_data) << endl;
【C++】char* 和 char[] 区别的理解的更多相关文章
- <转载>深入 理解char * ,char ** ,char a[ ] ,char *a[] 的区别
C语言中由于指针的灵活性,导致指针能代替数组使用,或者混合使用,这些导致了许多指针和数组的迷惑,因此,刻意再次深入探究了指针和数组这玩意儿,其他类型的数组比较简单,容易混淆的是字符数组和字符指针这两个 ...
- 深入 理解char * ,char ** ,char a[ ] ,char *a[] 的区别
转自:https://blog.csdn.net/liusicheng2008_liu/article/details/80412586 1 数组的本质 数组是多个元素的集合,在内存中分布在地址相连的 ...
- 深入 理解char * ,char ** ,char a[ ] ,char *a[] 的区别(转)
C语言中由于指针的灵活性,导致指针能代替数组使用,或者混合使用,这些导致了许多指针和数组的迷惑,因此,刻意再次深入探究了指针和数组这玩意儿,其他类型的数组比较简单,容易混淆的是字符数组和字符指针这两个 ...
- char* 和char[]的区别
以下内容均来自互联网,系笔者汇总并总结. 1. 问题介绍 问题引入:在实习过程中发现了一个以前一直默认的错误,同样char *c = "abc"和char c[]="ab ...
- [转载]char * 和char []的区别---之第一篇
char * 和char []的区别---之第一篇 原文地址http://blog.csdn.net/yahohi/article/details/7427724 在C/C++中,指针和数组在很多地 ...
- char[]数组与char *指针的区别
char[]数组与char *指针的区别 问题描述 虽然很久之前有看过关于char指针和char数组的区别,但是当时没有系统的整理,到现在频繁遇到,在string,char[], char *中迷失了 ...
- char 与 unsigned char的本质区别
在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别 首先在内存中,char与unsigned char没有什么不同 ...
- char , unsigned char 和 signed char 区别
ANSI C 提供了3种字符类型,分别是char.signed char.unsigned char.char相当于signed char或者unsigned char,但是这取决于编译器!这三种字符 ...
- 深入理解char * ,char ** ,char a[ ] ,char *a[]
1.数组的本质 数组是多个元素的集合,在内存中分布在地址相连的单元中,所以可以通过其下标访问不同单元的元素. 2.指针 指针也是一种变量,只不过它的内存单元中保存的是一个标识其他位置的地址.由于地址也 ...
- char *s 和 char s[] 的区别
最近的项目中有不少c的程序,在与项目新成员的交流中发现,普遍对于char *s1 和 char s2[] 认识有误区(认为无区别),导致有时出现“难以理解”的错误.一时也不能说得很明白,网上也搜了一下 ...
随机推荐
- 小程序图片预览 wx.previewImage
list: [ 'http://img5.imgtn.bdimg.com/it/u=3300305952,1328708913&fm=26&gp=0.jpg', 'http://i ...
- Java作业 题目:16版.真实员工数统计
题目:16版.真实员工数统计 该资源支持按部自动给分,评分规则如下: sjkdfhslkfdhdsiog函数定义测试 sjkdfhslkfdhdsiog函数定义测试 sjkdfhslkfdhdsiog ...
- 简单而粗暴的方法画任意阶数Bezier曲线
简单而粗暴的方法画任意阶数Bezier曲线 虽然说是任意阶数,但是嘞,算法原理是可以到任意阶数,计算机大概到100多阶就会溢出了 Bezier曲线介绍] [本文代码] 背景 在windows的Open ...
- js汉字转换为拼音
片段 1 片段 2 gistfile1.txt /* --- description: Pinyin, to get chinese pinyin from chinese. license: MIT ...
- Javaweb实训-宠物医院-社区宠物医院登陆页面
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2018/3/13 Ti ...
- wordpress后台编辑如何显示定义的`style.css`样式
wordpress后台编辑如何显示定义的style.css样式 由于公司官网采用wordpress进行搭建,但是却又自己设计页面,无奈主题只能自行构建了,直接修改wordpress自带的主题进行修改. ...
- JavaScript应懂的概念
目录 垃圾回收 函数作用域, 块级作用域和词法作用域 调用堆栈 原始类型 值类型和引用类型 隐式, 显式, 名义和鸭子类型 == 与 ===, typeof 与 instanceof this, ca ...
- vue学习【四】vuex快速入门
大家好,我是一叶,今天我们继续踩坑.今天的内容是vuex快速入门,页面传值不多的话,不建议vuex,直接props进行父子间传值就行,使用vuex就显得比较臃肿. 我们先预览一下效果,如图1所示. 图 ...
- Python基础——函数的装饰器
等待更新…………………… 后面再写
- 使用CXF开发WebService程序的总结(六):结合拦截器使用
1. 使用CXF提供的拦截器 拦截器在我看来分为两端两向,两端分为:客户端和服务端,两向(方向)分为:进(in)和出(out),即大致四类拦截器. 在这里利用cxf提供的 日志拦截器举例 1.1 在服 ...