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

您所在的位置:网站首页 char编程 C/C++编程语言中char** a和char* a[]介绍

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

2024-07-10 04:47| 来源: 网络整理| 查看: 265

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3