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

本文主要介绍 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[])

  • 40
    点赞
  • 143
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liitdar

赠人玫瑰,手有余香,君与吾共勉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值