本文主要介绍 C/C++ 编程语言中 char** a 与 char* a[] 的作用及两者的区别。

1 char** a

在 char** a 语句中,a 是一个指针,这个指针(即指针 a)指向一块内存地址,该内存地址中存储的是 char* 类型的数据。指针的加减运算在这里的体现为:a + 1 表示地址加 8 字节(在 32 位系统中,地址加 4 字节)。

char* 也是一个指针,用 *a 表示,这个指针(即指针 *a)指向一块内存地址,该内存地址中存储的是 char 类型的数据。指针的加减运算在这里的体现为:(*a) + 1 表示地址加 1 字节。

说明:

  • 在 32 位系统中,一个指针占用 4 字节(32 位)内存空间;在 64 位系统中,一个指针占用 8 字节(64 位)内存空间;
  • 由于 a 指向一个指针类型(char*),故 a + 1 操作就是对指针类型的地址进行操作,所以 a + 1 表示地址加 8 字节;*a指向一个 char 类型,char 类型占用 1 个字节,故 *a + 1 操作就是对 char 类型的地址进行操作,所以 *a + 1 表示地址加 1 字节。

2 char* a[]

在 char* a[] 中,a 是数组,数组中的元素是指针,这些指针指向 char 类型的数据。

说明:

  • 数组里面所有的元素,在内存中都是是连续存放的;
  • 数组名在 C 语言中做了特殊处理,数组名使用数组所占用的(连续)内存区域的第一个字节的内存地址替代了。例如,数组占用的内存区域是 0x7fff5da3f550 到 0x7fff5da3f5a0,那么数组名 a 就会被替换成首地址 0x7fff5da3f550;
  • a+1 表示数组 a 的第二个元素的内存地址,所以 a + 1 是地址加 8 字节(再次说明,因为数组 a 的元素是指针(char*),指针类型占用 8 字节);
  • char* a[10] 表示限定这个数组最多可以存放 10 个指针(char*)元素,也就是说这个数组会占用 10 * 8 = 80 个字节。

3 两者区别与联系

3.1 赋值

可以使用 char* a[] 给 char** 赋值,代码如下:

    char* a[] = {"hello world", "liitdar"};char** b = a;

但不能使用 char** 给 char* a[] 赋值,因为在 char* a[] 中,a作为数组名,是一个常量,我们不能给常量赋值。

3.2 作为程序入参

char* a[] 给 char** 都可以作为程序的入参,用于接收用户执行程序时输入的参数,通常在 main 函数中使用,代码如下:

int main(int argc, char ** argv)

或:

int main(int argc, char *argv[])

C/C++编程语言中char** a和char* a[]介绍相关推荐

  1. python为什么从0开始_为什么大多数编程语言中,索引都是从0开始

    为什么大多数编程语言中,索引都是从0开始 世界上绝大多数语言,但凡涉及到了索引这个概念,索引都是从0开始的,对于初学者,难免觉得别扭,毕竟生活中,但凡涉及到和顺序有关的概念,都是从1开始的,那么为什么 ...

  2. 在众多编程语言中,你可知哪种语言的安全性更高,安全漏洞最少?

    编程语言之争,一直以来是开发者社区的热议问题,因为开发者喜欢证明自己所使用的编程语言占据主导地位,尤其是安全性,只不过讨论的过程往往都伴随着双方的愤怒,最后不了了之.那么,你可知在众多热门编程语言中, ...

  3. python 计算机程序设计-计算机编程语言中,为何Python独得恩宠?

    原标题:计算机编程语言中,为何Python独得恩宠? 截止到2019年6月,根据Indeed网站的统计分析,美国Python开发人员的平均年薪为117,822美元. 相比Java从业者的年薪 $102 ...

  4. C 语言中 void* 详解及应用介绍

    void 在英文中作为名词的解释为 "空虚.空间.空隙",而在 C 语言中,void 被翻译为"无类型",相应的void * 为"无类型指针" ...

  5. 历史上的今天:编程语言中null引用的十亿美元错误

    这是Jerry 2021年的第 10 篇文章,也是汪子熙公众号总共第 281 篇原创文章. 今天是2021年1月17日,星期日,腊月初五. Jerry之前收到CSDN社区赠送的新年礼物,一本台历:&l ...

  6. 编程语言中,还有一种语言,那就是用中文来编程

    编程语言有很多种,不管是JavaScript,java.还是php.还是c语言.又或者是c++等等,这些语言基本都是差不多的有相似之处,只不过就是变了一种表达形式罢了.并且在语句和语法上都存在很多相似 ...

  7. 编程语言中,循环变量通常都用 i?你知道为什么吗?

    01 前天,我在朋友圈发了一个问题: 为什么编程中,循环变量通常都是用 i ? 没想到,回复的人这么多!要连翻好几页. 这个问题,有 2/3 的人回答正确,有少部分人知道,但是不太确定. 习惯性用 i ...

  8. 为什么编程语言要从c语言学起,在那么多编程语言中,为什么推荐初学者学 C 语言?...

    如果你学过了计蒜客的<编程初学入门常识>的课,你就会知道,一个汇编写的操作系统,是没有办法在不同的计算机上普适使用的.所以呢,Ken 和 Dennis 为了让更多人在非 PDP-7 小型机 ...

  9. c语言中int类型与char类型数据转换

    1.char----->int: 少字节类型转换为多字节类型,没有影响,数据也不会发生变化. #include <stdio.h> int main() {char cret = 0 ...

  10. c语言中code table,unsigned char code table[]中的code的作用

    unsigned char code table[]中的code的作用是告诉单片机,我定义的无符号的字符串组放在ROM(程序存储区)里面,因为C语言中没办法详细描述存入的是ROM还是RAM(寄存器), ...

最新文章

  1. Could not get dialect instance.
  2. ASP.NET 快乐建站系列 -- 1. 十五分钟建立精美网站
  3. 计算机开始按钮作用,Win8.1的12个变化:开始按钮回归功能不再
  4. maven依赖decoder_引入依赖maven打包报错
  5. swf批量转png_CAD批量打印(探索者易打软件)优势介绍
  6. python如何输入一个数停止输出可循环部分_Python 第04周:控制与循环
  7. Linux的基本命令符
  8. OpenCV计算机视觉实战(Python版)_006边缘检测
  9. 部门日报系统部署备忘录
  10. 搜狗深入布局人工智能 Q2营收利润创新高
  11. 电商促销后台设计,写得太好了!
  12. The King’s Problem 强连通
  13. mac设置第三方输入法为默认输入法
  14. python乱码怎么办_python中urllib.unquote乱码的原因与解决方法
  15. 如何在ppt中插入pyecharts生成的html图表(及可能的报错解决方法)
  16. 写好英语科技论文的诀窍: 主动迎合读者期望,预先回答专家可能质疑--周耀旗教授...
  17. 自编真假探测游戏来了 好玩
  18. Echat 地图样式格式
  19. shiro 拦截器链
  20. 令人惊艳的80个免费学习网站,每一个都备受好评!

热门文章

  1. 激光雷达是什么?一文带你读懂激光雷达
  2. swoole各种服务器初步搭建
  3. Linux-MySQL主从配置
  4. MSSQL中Case语句的用法
  5. 再探java基础——对面向对象的理解(1)
  6. 关于利用 achartengine 画 股票 分时线
  7. Centos 查看CPU个数、核心数等信息
  8. Linux 系统级开启文件句柄 调优
  9. angular2组件通讯
  10. POJ1185炮兵阵地(状态压缩 + dp)