Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果条件语句与正则C表达式中的类型转换不同,则类型转换是否也不同? #包括 int main() { 开关(*(1+AB+CD+1)) { 案例A:printf(“低俗小说”); 打破 案例B:printf(“12个愤怒的人”); 打破 案例C:printf(“卡萨班斯”); 打破 案例D:printf(“血钻”); } 返回0;_C_String_String Literals - Fatal编程技术网

如果条件语句与正则C表达式中的类型转换不同,则类型转换是否也不同? #包括 int main() { 开关(*(1+AB+CD+1)) { 案例A:printf(“低俗小说”); 打破 案例B:printf(“12个愤怒的人”); 打破 案例C:printf(“卡萨班斯”); 打破 案例D:printf(“血钻”); } 返回0;

如果条件语句与正则C表达式中的类型转换不同,则类型转换是否也不同? #包括 int main() { 开关(*(1+AB+CD+1)) { 案例A:printf(“低俗小说”); 打破 案例B:printf(“12个愤怒的人”); 打破 案例C:printf(“卡萨班斯”); 打破 案例D:printf(“血钻”); } 返回0;,c,string,string-literals,C,String,String Literals,} 这是一个C代码,它根据给定字符串中的第三个字符给出输出。 “AB”“CD”给卡萨班斯,“AB”“DD”给血钻。 我想知道switch语句中的表达式是如何计算的 我尝试了另一个代码 #include<stdio.h> int main() { switch(*(1+"AB""CD"+1)) { case'A':printf("Pulp Fiction"); break; case'B':printf("12

}

这是一个C代码,它根据给定字符串中的第三个字符给出输出。 “AB”“CD”给卡萨班斯,“AB”“DD”给血钻。 我想知道switch语句中的表达式是如何计算的

我尝试了另一个代码

#include<stdio.h>
int main()
{
    switch(*(1+"AB""CD"+1))
    {
        case'A':printf("Pulp Fiction");
              break;
        case'B':printf("12 Angry Man");
              break;
        case'C':printf("Casabance");
              break;
        case'D':printf("Blood Diamond");
    }
    return 0;
#包括
int main()
{
常量字符ch=*(1+“AB”“AD”+1);
printf(“%c”和“ch”);
返回0;
}
这段代码为我对字符串所做的任何更改提供了一个输出“f”。 我想知道这个表达式是如何计算的


为什么上述两种代码不同呢?

这里有一个重要的错误

#include<stdio.h>
int main()
{
    const char ch=*(1+"AB""AD"+1);
    printf("%c",&ch);
    return 0;
}
将打印
ch
的地址,但如果要打印字符,请执行以下操作

printf("%p", (void *) &ch);

另外,
1+“AB”“CD”+1
是一种荒谬的书写方式,请原谅我写
“ABCD”+2
它没有错,而且100%有效,但它让你思考为什么,为什么有人会浪费时间做这件事?

在这个转换语句中

printf("%c", ch);
const char ch=*(1+"AB""AD"+1);
printf("%c",&ch);
首先,编译器将字符串文本“AB”和“CD”连接在一起,其结果如下所示

switch(*(1+"AB""CD"+1))
字符串文字存储为以零结尾的字符数组。例如,在C字符串文字>代码> ABCK“< /Cord>”中有类型<代码> char [5 ] < /C>(在C++字符串中有常数字符数组的类型。因此C++中的字符串文字<代码>”ABCD“< /Cord>”有类型<代码> const char [5 ] < /> >) 表达式中的数组隐式转换为指向数组的第一个字符的指针

因此,在这个表达式中,
1+“ABCD”+1
可以写得更简单,如

switch(*(1+"ABCD"+1))

这里使用了所谓的指针算法。表达式的结果是指向字符串文本的第三个元素的指针,其类型为
char*

因此,应用解引用可以得到字符串文字的第三个字符

在这个代码片段中

"ABCD" + 2
使用相同的字符串文字和类型为
const char
的对象
ch
,该对象由字符串文字的相同第三个字符初始化

但在声明中,

printf("%c", ch);
const char ch=*(1+"AB""AD"+1);
printf("%c",&ch);
您正在尝试将对象的地址作为字符输出。只要写就对了

printf("%c",&ch);

您的代码调用未定义的行为,您无法可靠地预测它的输出。@iharob我认为这里不是这种情况<代码>“AB”“CD”只是一个字符串文字,因此,它有一个清晰的类型(
const char*
),并且有明确的规则如何将其添加到整数文字中并向其添加整数文字。@MarcusMüller请阅读我的答案。啊,您指的是
printf
语句,而不是实际的
开关
条件?
“AB”“CD”
相同。添加2将指向第三个字符。您能指出错误吗?表达式是如何计算的吗?@jeet该错误与表达式无关,它与
const char*sting=“ABCD”;开关(字符串[2])
。我已经编写了(1+“AB”“CD”+1)只是为了检查数字是否正常相加。在Java中,表达式是根据字符串进行类型转换的。例如out.print()语句中的“A”+1会将1转换为字符串类型。如果不是,则会将1转换为字符串类型。Java和c是非常不同的语言,您需要阅读指针算术的相关内容“有类型<代码> const char */COD>,不是<代码> char []/COD>,损坏了吗?@ C字符串中的McCurmüLLLE具有非恒定字符数组的类型,而在C++中,它们确实具有常数字符数组的类型。这道题被标为C题,不是吗?
printf( "%c", ch );