C++中 char *s 和 char s[] 的区别
原因
刚好看到给main传递参数,书上(C++Primer)说“ int main(int argc, char *argv[])也可以写成 int main(int argc, char **argv),argv 是 C风格字符串数组 ”。
然后各种别扭,感觉有什么没弄明白(最怕这样,不知道自己不知道什么)。
于是敲敲写写,当敲到 char c='x'; char *pc=&c; 的时候突然回过神来,原来char **argv=&pc; 的时候,argv 可不是 C风格字符串数组 !
char **argv 直接理解的话就是char 指针的指针,跟 C风格字符串数组 未必完全一致!
就是说,如果是char **argv ,那我完全可以传入上面的argv(&pc),那编译器会怎么处理?
char *s1 = "abc"; // 指向字符串字面值常量的指针,常量不可修改,所以其实是const char *s1 。疑问:const怎么能赋值给非const?
char s2[] = "abc"; // 数组!内容可变,但地址及长度不可变,所以其实是char *const s22=&s2。
char *const s22=s2;
// char *const s23=&s2; //被禁止了 char s3[]={'a','b','c','\0'}; //同s2!
char *const s23=s3;
// s3=s2; //数组名,底层被转成指针,而且是char *const 的指针 // s1[0]='x'; //无响应
s2[]='x'; //OK
s3[]='x';
猜测
底层会添加一些内容,从而保证const正确???
其他
定义指向数组的指针(非数组名或者数组第一个元素,而是其指针的指针)
char cs4[] = "abc";
char *cs44 = cs4;
char **cs444 = &cs44; //必须这么间接定义?
乱语
C++定义了一堆术语,又给每个术语及其基本组合都规定了一些基础的逻辑,然后任由发挥。。。
虽然高工会很爽,但新人期间会很惨!极容易因为想不到某些逻辑而抓狂。
够低级(底层吧。。)
贴个好文章 char *s 和 char s[] 的区别小结
C++中 char *s 和 char s[] 的区别的更多相关文章
- MySQL中char、varchar和text的区别
三者空间占用方面: char:存储定长数据很方便,CHAR字段上的索引效率极高,可以有默认值,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间(自动用空格填 ...
- C语言中为什么不能把char**赋给const char**
这是我在知乎回答的一个问题. 这个问题是C中的一个深坑,首先说结论: char ** 和 const char ** 是两个不相容(incompatible)的类型,能够理解为不能直接赋值 在C11的 ...
- 批量替换数据库中所有用户数据表中字段数据类型为char和varchar到nvarchar的脚本
解决问题:字段类型为char的总是占用指定字节长度(末尾好多空白符号),varchar数据类型长度一个汉字占2个字节,内容存储为中文的字段个人建议全部使用nvarchar. 操作说明:打开SQL Se ...
- c/c++ 中的char* ,const char* 和 char* const 总结[转]
文章转自:c/c++ 中的char* ,const char* 和 char* const 总结 例1: char* str="abc";//错误写法 (在.c文件中是正确的) c ...
- Oracle数据库中字段定义为Char类型,Hibernate用该字段进行动态绑定参数查询,获取不到结果的问题
一.问题背景 产生环境:oracle数据库,hibernate操作 定义了一个表 create table STORE_INFORMATION ( id CHAR(32) not null, name ...
- 理解C/C++中const char*、char* const、const char* const、char* const*等等
先说些题外话,今天学习execve(2)的使用,由于书上代码使用的是C89标准,所以下面这种代码都被我修改了 char* s[] = { "aaa", "bbb" ...
- MFC中CString转换成char数组的问题
由于结构体中用到联合体(联合体需要确定分配内存分配大小)或其它因素,需要用char数组来保存字符串,但是在MFC中一般都是用CString来存放字条串.关于它们之间的转换,在VS2008中有时会出现异 ...
- java中String,int,Integer,char、double类型转换
java中String,int,Integer,char.double类型转换----https://www.cnblogs.com/kangyu222/p/5866025.html
- C 中 char、signed char 和 unsigned char 的区别
C 中 char.signed char 和 unsigned char 的区别 来源:http://bbs.chinaunix.net/thread-889260-1-1.html 参考:https ...
- C#中数据类型char*,const char*和string的三者转换
C#中数据类型char*,const char*和string的三者转换: . const char* 和string 转换 () const char*转换为 string,直接赋值即可. EX: ...
随机推荐
- java的jdbc简单封装
在学了jdbc一段时间后感觉自己写一个简单的封装来试试,于是參考的一些资料就写了一下不是多好,毕竟刚学也不太久 首先写配置文件:直接在src下建立一个db.properties文件然后写上内容 < ...
- map以自定义类型当Key
关于map的定义: template < class Key, class T, class Compare = less<Key>, class Allocator = alloc ...
- shell 批量查看job 配置
如查看构建失败发送情况 进入job 目录,查找以DailyBuild开头的job的配置文件 grep '<hudson.plugins.emailext.plugins.trigger.Fail ...
- 【Android】3.11 地理编码功能
分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 一.简介 地理编码指的是将地址信息建立空间坐标关系的过程,提供了地理坐标和地址之间相互转换的能力. 地理编码分 ...
- 2014年百度之星资格赛第四题Labyrinth
Problem Description 度度熊是一仅仅喜欢探险的熊.一次偶然落进了一个m*n矩阵的迷宫.该迷宫仅仅能从矩阵左上角第一个方格開始走.仅仅有走到右上角的第一个格子才算走出迷宫,每一次仅仅能 ...
- mysqldump 导出数据库为DBname的表名为Tname的表结构 导出数据库的所有表的表结构
mysqldump -uroot -p password -d DBname Tname >db.sql #关建点是"-d"参数 导出数据库的所有表的表结构 mysqldum ...
- dubbo服务端,dubbo客户端,注册中心(zk)之间的心跳
dubbo客户端和dubbo服务端之间存在心跳,由dubbo客户端主动发起,可参见dubbo源码 HeartbeatTask. dubbo服务端和注册中心(zk)存在心跳,由dubbo服务端发起,这是 ...
- mysql 安装 注意点
选择连接数: next next 选择编码 next next 输入root默认密码 勾上 允许远程连接本机
- uC/OS-III 概要
本章主要对 uC/OS-III 实时操作系统做一些概要介绍,使读者对 uC/OS-III 有个整体的浅 认识,为后面的章节的详细讲解做一个铺垫. 下图是 uC/OS-III 系统从底层到上层的文件结构 ...
- MongoDB学习之(一)安装
第一步:下载MongoDB的安装版进行安装 https://pan.baidu.com/s/1X3hIqORJ61TCG1UJ_yr6ag 由于第二次安装出现一些问题,所有还是记录一下,免得以后踩坑. ...