原因

刚好看到给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[] 的区别的更多相关文章

  1. MySQL中char、varchar和text的区别

    三者空间占用方面: char:存储定长数据很方便,CHAR字段上的索引效率极高,可以有默认值,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间(自动用空格填 ...

  2. C语言中为什么不能把char**赋给const char**

    这是我在知乎回答的一个问题. 这个问题是C中的一个深坑,首先说结论: char ** 和 const char ** 是两个不相容(incompatible)的类型,能够理解为不能直接赋值 在C11的 ...

  3. 批量替换数据库中所有用户数据表中字段数据类型为char和varchar到nvarchar的脚本

    解决问题:字段类型为char的总是占用指定字节长度(末尾好多空白符号),varchar数据类型长度一个汉字占2个字节,内容存储为中文的字段个人建议全部使用nvarchar. 操作说明:打开SQL Se ...

  4. c/c++ 中的char* ,const char* 和 char* const 总结[转]

    文章转自:c/c++ 中的char* ,const char* 和 char* const 总结 例1: char* str="abc";//错误写法 (在.c文件中是正确的) c ...

  5. Oracle数据库中字段定义为Char类型,Hibernate用该字段进行动态绑定参数查询,获取不到结果的问题

    一.问题背景 产生环境:oracle数据库,hibernate操作 定义了一个表 create table STORE_INFORMATION ( id CHAR(32) not null, name ...

  6. 理解C/C++中const char*、char* const、const char* const、char* const*等等

    先说些题外话,今天学习execve(2)的使用,由于书上代码使用的是C89标准,所以下面这种代码都被我修改了 char* s[] = { "aaa", "bbb" ...

  7. MFC中CString转换成char数组的问题

    由于结构体中用到联合体(联合体需要确定分配内存分配大小)或其它因素,需要用char数组来保存字符串,但是在MFC中一般都是用CString来存放字条串.关于它们之间的转换,在VS2008中有时会出现异 ...

  8. java中String,int,Integer,char、double类型转换

    java中String,int,Integer,char.double类型转换----https://www.cnblogs.com/kangyu222/p/5866025.html

  9. C 中 char、signed char 和 unsigned char 的区别

    C 中 char.signed char 和 unsigned char 的区别 来源:http://bbs.chinaunix.net/thread-889260-1-1.html 参考:https ...

  10. C#中数据类型char*,const char*和string的三者转换

    C#中数据类型char*,const char*和string的三者转换: . const char* 和string 转换 () const char*转换为 string,直接赋值即可. EX: ...

随机推荐

  1. 开源 java CMS - FreeCMS2.2 单位管理

    项目地址:http://www.freeteam.cn/ 单位管理 FreeCMS支持多单位同一时候使用,并支持无限树级管理. 1. 加入根单位 从左側管理菜单点击单位管理进入. 点击"加入 ...

  2. Python tuple 函数

    描述 Python 元组 tuple() 函数将列表转换为元组. 语法 以下是 tuple 的语法: tuple( seq ) 参数 seq -- 要转换为元组的序列. 返回值 返回元组. 实例 以下 ...

  3. SQL Server 异常处理机制(Begin try Begin Catch) 摘录

    begin try --SQL end try begin catch --sql (处理出错动作) end catch 我们将可能会出错的sql 写在begin try...end try 之间,若 ...

  4. mysql如何查找某字段所在表

    如果是5.0以上的,以root用户连接,可以看到一个叫information_schema的表, 然后只要:use information_schema; select `TABLE_NAME`fro ...

  5. JavaScript实时显示当前时间的例子

    用javascript代码在当前页面中实时显示当前时间.代码如下: <html> <head> <title>JavaScript 实时显示当前时间-www.jbx ...

  6. [k8s]容器化node-expolore(9100)+cadvisor(8080)+prometheus(9090) metric搜集,grafana展示

    Prometheus 的核心,多维数据模型 传统监控工具统计数据方式 指标多 - 需求1,统计app1-3,的(总)内存,则定义3个指标 container.memory_usage_bytes.we ...

  7. ControlExtensionTest(一)

    #ifndef __CCCONTROLSCENE_H__ #define __CCCONTROLSCENE_H__ #include "cocos2d.h" #include &q ...

  8. 利用ForgeryPy生成虚拟数据

    在程序研发过程中,我们往往需要大量的虚拟实验数据.Python中有多个包可以用于生成虚拟数据,其中功能较为完善的是ForgeryPy. 1 安装 采用pip进行安装: pip install Forg ...

  9. http,javascript的编码解码

    http,javascript的编码解码 请求与响应的编码应分开分析 两者的编码,解码处理是相对独立的流程 依赖于相对独立的header: request header, response heade ...

  10. eclipse javaee 插件安装

    eclipese 精简版安装java ee插件 , 按图走  (eclipse 版本 : Indigo Service Release 1   (3.7.1)) java ee 在线安装地址: htt ...