C 如果条件字符串被给定,它将被视为true,但它返回什么?
为什么if条件中的字符串文字被视为trueC 如果条件字符串被给定,它将被视为true,但它返回什么?,c,if-statement,C,If Statement,为什么if条件中的字符串文字被视为true if("whatiamreturning") //this is true. I want to know y? if("whatiamreturning") 基于上述情况,这里发生了什么 #include<stdio.h> void main() { static int i; for(;;) { //infinite loop if(i+++"The Matrix") //
if("whatiamreturning")
//this is true. I want to know y?
if("whatiamreturning")
基于上述情况,这里发生了什么
#include<stdio.h>
void main() {
static int i;
for(;;) { //infinite loop
if(i+++"The Matrix")
// what is happening in the above line?
printf("Memento");
else
break;
}
}
#include<stdio.h>
void main() {
#包括
void main(){
静态int-i;
对于(;){//无限循环
if(i++“矩阵”)
//上面这一行发生了什么?
printf(“纪念品”);
其他的
打破
}
}
它将返回字符串的第一个元素的地址whatiamreturning
基本上,当您将字符串文字指定给
char
指针时
char *p;
p = "whatiamreturning";
赋值不会复制whatiamreturning
中的字符,而是使p
指向字符串的第一个字符,这就是为什么可以为字符串文本编写子脚本
char ch = "whatiamreturning"[1];
ch
现在将具有字符h
。这是因为编译器将whatiamreturning
视为char*
并计算文本的基址
如果(i++“矩阵”)
等效于
if( i++ + "The Matrix")
或者可以重写为
if(&("The Matrix"[i++]))
对于每个
i
,它都是true
,并导致无限循环。最终,由于变量i
的整数溢出,代码将遭受未定义行为的影响 它将返回字符串的第一个元素的地址whatiamreturning
基本上,当您将字符串文字指定给
char
指针时
char *p;
p = "whatiamreturning";
赋值不会复制whatiamreturning
中的字符,而是使p
指向字符串的第一个字符,这就是为什么可以为字符串文本编写子脚本
char ch = "whatiamreturning"[1];
ch
现在将具有字符h
。这是因为编译器将whatiamreturning
视为char*
并计算文本的基址
如果(i++“矩阵”)
等效于
if( i++ + "The Matrix")
或者可以重写为
if(&("The Matrix"[i++]))
对于每个
i
,它都是true
,并导致无限循环。最终,由于变量i
的整数溢出,代码将遭受未定义行为的影响 它将返回字符串的第一个元素的地址whatiamreturning
基本上,当您将字符串文字指定给
char
指针时
char *p;
p = "whatiamreturning";
赋值不会复制whatiamreturning
中的字符,而是使p
指向字符串的第一个字符,这就是为什么可以为字符串文本编写子脚本
char ch = "whatiamreturning"[1];
ch
现在将具有字符h
。这是因为编译器将whatiamreturning
视为char*
并计算文本的基址
如果(i++“矩阵”)
等效于
if( i++ + "The Matrix")
或者可以重写为
if(&("The Matrix"[i++]))
对于每个
i
,它都是true
,并导致无限循环。最终,由于变量i
的整数溢出,代码将遭受未定义行为的影响 它将返回字符串的第一个元素的地址whatiamreturning
基本上,当您将字符串文字指定给
char
指针时
char *p;
p = "whatiamreturning";
赋值不会复制whatiamreturning
中的字符,而是使p
指向字符串的第一个字符,这就是为什么可以为字符串文本编写子脚本
char ch = "whatiamreturning"[1];
ch
现在将具有字符h
。这是因为编译器将whatiamreturning
视为char*
并计算文本的基址
如果(i++“矩阵”)
等效于
if( i++ + "The Matrix")
或者可以重写为
if(&("The Matrix"[i++]))
对于每个i
,它都是true
,并导致无限循环。最终,由于变量i
的整数溢出,代码将遭受未定义行为的影响
这将取i
的值,在内存中添加字符串“矩阵”
位置的指针值,并将其与零进行比较。之后,它会将i
的值增加一
这不是很有用,因为指针值基本上可以是任何随机数(取决于体系结构、操作系统等)。因此,整个程序相当于打印Memento
随机次数(每次运行的次数可能相同)
也许你想写if(*(i++“矩阵”)
。这将循环10次,直到它i+“矩阵”
计算到字符串末尾指向NUL
字节的地址,因此*(i+“矩阵”)
将返回0
顺便说一句,空格是提高代码可读性的好方法
if("whatiamreturning")
这将取i
的值,在内存中添加字符串“矩阵”
位置的指针值,并将其与零进行比较。之后,它会将i
的值增加一
这不是很有用,因为指针值基本上可以是任何随机数(取决于体系结构、操作系统等)。因此,整个程序相当于打印Memento
随机次数(每次运行的次数可能相同)
也许你想写if(*(i++“矩阵”)
。这将循环10次,直到它i+“矩阵”
计算到字符串末尾指向NUL
字节的地址,因此*(i+“矩阵”)
将返回0
顺便说一句,空格是提高代码可读性的好方法
if("whatiamreturning")
这将取i
的值,在内存中添加字符串“矩阵”
位置的指针值,并将其与