char ** char *a[]
时间: 2023-10-22 22:08:54 浏览: 108
char **和char *a[]分别是指针的指针和指针数组。char **可以用来表示一个指向指针的指针,而char *a[]表示一个指针数组,数组的每个元素都是一个指向char类型的指针。
在给char **赋值时,可以直接将一个指向char类型的指针的地址赋给它。例如,char *p = "hello world"; char **a = &p;。
而在给char *a[]赋值时,可以使用另一个指针数组的地址赋给它。例如,char *b[] = {"hello", "world"}; char **a = b;。
需要注意的是,不能将char **直接赋值给char *a[],因为char *a[]中的a是一个数组名,是一个常量,我们不能直接给常量赋值。
相关问题
char *a = (char*)malloc(sizeof(char)*100);与char a[100];对于char *o=char *a有何区别
在第一行代码 `char *a = (char*)malloc(sizeof(char)*100);` 中,`a` 是一个指向字符的指针,它指向了连续的内存空间,这些内存空间可以存储 100 个字符。此时,`a` 指向的内存空间是在堆上动态分配的。使用完毕后,需要释放这些内存空间,否则会造成内存泄漏。
在第二行代码 `char a[100];` 中,`a` 是一个字符数组,它也可以存储 100 个字符。此时,`a` 的内存空间是在栈上自动分配的。在使用完毕后,无需手动释放内存空间。
而 `char *o = a;` 则是将指针 `o` 指向了指针 `a` 指向的内存空间,或者说是把 `a` 的地址赋值给了 `o`。这两个指针指向的是同一片内存空间,它们的区别在于它们的生命周期和内存空间的分配方式不同。需要注意的是,如果在使用 `o` 指向的内存空间时释放了 `a` 指向的内存空间,那么 `o` 指针将会指向一块已经释放的内存空间,这种情况称为悬垂指针,会导致程序异常。
char* a = *(char**)e1 的char**什么意思
`char**`是一个指向指针的指针,也称为二级指针。在`char* a = *(char**)e1`中,`(char**)e1`将`e1`强制转换为指向指针的指针,即二级指针,然后`*(char**)e1`将其解引用为指向字符的指针,即一级指针。最终,`char* a`将指向解引用后的一级指针所指向的字符。
阅读全文