c - 了解指针。 *((char **) 等于什么?

标签 c pointers

在 C 语言中,我有:

char *p, *q;
p = malloc(1);  //for the purpose testing only
p[0] = '!';
q = *((char **)p);
printf("p=%x q=%x\n", p, q);
printf("p=%c q=%c\n", p, q);

没有强制转换警告,输出为:

p=1a9008 q=21
p q=!

分配给q的表达式(即*((char **)p))会发生什么?赋值后,q 的类型是否发生变化?

<小时/>

编辑:我的代码中有错误。在尝试从代码片段中提取它时,我遇到了一个完整的工作示例,我错误地使用了 p 类型的 char 示例值。在检查了更多原始代码之后,p 被分配了一个指针值。所以 p 是一个指向指针的指针。

最佳答案

首先,变量的类型不能改变,如果它被声明为 char* q 那么它的类型就是 char*

什么可以改变变量的值,但在你的情况下,代码是错误的。

第一个 p 被声明为指向 char 的指针,并通过 malloc 分配单个字节,因此您将得到类似的内容

p = 0xDEADBEEF
        |
        ---> '!'

然后通过强制转换,您强制将 p 视为 char**,因此指向 char 的指针,发生的情况是编译器被强制考虑

p = 0xDEADBEEF
        |
        -----> 0x??????21
                    |
                    --------> char

所以基本上你是强制手动分配和分配的内存被解释为内存地址,然后你取消引用这个指针到指针,以便 *(char**) 产生一个 char *0x??????21,所以没有意义。

关于c - 了解指针。 *((char **) 等于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36372433/

相关文章:

c - openssl RSA公钥与从C代码读取的 key 不匹配

java - 无法打开共享对象文件: No such file or directory error while run time

c - 错误 : undefined reference to math functions

c - 如何对 char 字符串/数组使用 malloc() 函数?

C++数组查询

无法为带有数字的结构创建名称

c - 如何杀死进程组僵尸

c++ - 分配给 map 时构造的两个对象

C: struct->char *: contents changed: 有人能解释一下吗?

c - 同时使用aio_write和write