kasumi_official 发表于 2022-11-7 21:51:37

指向字符数组的指针

想问下大佬们 a不是已经是字符数组的地址了吗,为什么对它取址还能得到字符串呢?

#include <stdio.h>

int main()
{
        char a = "Jack";
        printf("%s\n",&a);
}

jackz007 发表于 2022-11-7 22:01:42

          a 是常量指针(a 不接受赋值),并不是一个变量,所以,& a 的值还是它自己本身。

桃花飞舞 发表于 2022-11-7 22:16:01

jackz007 发表于 2022-11-7 22:01
a 是常量指针(a 不接受赋值),并不是一个变量,所以,& a 的值还是它自己本身。

长知识了,我只知道是常量指针,没想到常量指针取地址还是它自己本身

kasumi_official 发表于 2022-11-7 22:20:47

jackz007 发表于 2022-11-7 22:01
a 是常量指针(a 不接受赋值),并不是一个变量,所以,& a 的值还是它自己本身。

又是您 非常感谢大佬的帮助!

xiaotubie 发表于 2022-11-9 21:59:12

本帖最后由 xiaotubie 于 2022-11-9 22:23 编辑

我只能说一楼的回答是完全错误的。首先a不是地址,iso国际标准组织的c语言标准中定义了数组a在大多数表达式中会转换为指向数组第一个元素的指针,指针的值是数组第一个元素的地址,如果遇到&和sizeof则不会发生转换,也就是还代表数组本身;而这里&a中的a恰恰是这种特殊的情况,表示数组本身,因此&a表示指向数组的指针,它的值是数组的地址,跟常量没半毛钱关系。
intn=a   编译器提示错误:int* 类型不能转换为int类型。这里a是int*类型,表示指向数组第一个元素的指针
int n=&a   编译器提示错误:int (*)[]类型不能转换为int类型。这里&a类型是一个数组指针,而a解释为数组

xiaotubie 发表于 2022-11-9 22:49:37

桃花飞舞 发表于 2022-11-7 22:16
长知识了,我只知道是常量指针,没想到常量指针取地址还是它自己本身

你的理解有误

桃花飞舞 发表于 2022-11-9 22:57:26

本帖最后由 桃花飞舞 于 2022-11-9 23:05 编辑

xiaotubie 发表于 2022-11-9 22:49
你的理解有误

对,你的回答是正确的,谢谢了,我还觉得奇怪,怎么&a还是它本身,我完全被一楼带歪了。还是要个正确的,不然错误满天飞。&a,这时候a是数组类型的变量,&a是指整个数组的起始地址,只不过恰好和&a相等而已,意义大相近庭,&a+1就越界,正好可以证明。
页: [1]
查看完整版本: 指向字符数组的指针