在 C 中使用 " 和 ' 的区别
Difference between using " and ' in C
我尝试了 运行 一个 C 程序,代码为:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char grade;
float mark;
printf("Enter total mark percentage : ");
scanf("%f", &mark);
if(mark>=90){
grade="A";
}else{
grade="B";
}
printf("Your grade is %c", grade);
return EXIT_SUCCESS;
}
它会产生一个警告“从 'char' 到 'char*' 的赋值从没有转换的指针生成整数”。
我可以通过在第 10 行和第 12
行将 " 更改为 ' 来解决它
grade='A';
}else{
grade='B';
}
这解决了警告。但我想用 " 来包含 A & B。
我尝试在第 5 行将 mark 初始化为 int 而不是 char 但它也没有用.
我只想知道使用 ' 和 " .
有什么区别
"..." 用于字符串 - 即。以 NUL 结尾的字符数组(char[] 或 char*)
'.'用于 单个 字符 - 即。一个字符。
例如:
"Hello" 是一个字符串(字符数组),包含以下 6 个单个字符:
'H', 'e', 'l', 'l', 'o', '\0' (最后一个是 NUL 字符).
因此
'A' 只是 'A'(包含 A 的 ASCII 值的单个字符)
而
"A" 是一个字符 array,包含两个字符 - 'A' 和 '\0'(因此是一个字符串)
" " 用于字符串,' ' 用于字符。因为A和B是
字符,我们将为它们使用单引号。
这就是为什么这种格式是正确的。
grade='A';
}else{
grade='B';
}
符号'
用于指定整型字符常量。例如 'A'
是一个整型字符常量,类型为 int
.
符号"
用于指定字符串文字。例如 "A"
是一个类型为 char[2]
的字符串文字。即字符串字面量是一个字符数组,存储方式如
{ 'A', '[=10=]' }
字符串文字包含以零终止字符 '[=21=]'
结尾的字符序列,这些字符也存储在字符串文字中。
表达式中使用的字符数组指示符被隐式(极少数例外)转换为指向其第一个类型 char *
或 const char *
.
的元素的指针
这意味着在这个赋值语句中
grade="A";
具有数组类型 char[2]
的字符串文字 "A"
被转换为指向其第一个元素 'A'
的指针。结果,编译器发出一条消息,表明您正在尝试将指针分配给整数类型的对象。
你可以这样写
grade = "A"[0];
或
grade = *"A";
但这只会让代码的读者感到困惑,因为这样写起来会更简单明了
grade = 'A';
那就是不需要像"A"
那样使用整个数组(记住它在内部代表两个元素的数组{ 'A', '[=28=]' }
)只使用它的一个元素'A'
.
我尝试了 运行 一个 C 程序,代码为:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char grade;
float mark;
printf("Enter total mark percentage : ");
scanf("%f", &mark);
if(mark>=90){
grade="A";
}else{
grade="B";
}
printf("Your grade is %c", grade);
return EXIT_SUCCESS;
}
它会产生一个警告“从 'char' 到 'char*' 的赋值从没有转换的指针生成整数”。
我可以通过在第 10 行和第 12
grade='A';
}else{
grade='B';
}
这解决了警告。但我想用 " 来包含 A & B。 我尝试在第 5 行将 mark 初始化为 int 而不是 char 但它也没有用. 我只想知道使用 ' 和 " .
有什么区别"..." 用于字符串 - 即。以 NUL 结尾的字符数组(char[] 或 char*)
'.'用于 单个 字符 - 即。一个字符。
例如: "Hello" 是一个字符串(字符数组),包含以下 6 个单个字符:
'H', 'e', 'l', 'l', 'o', '\0' (最后一个是 NUL 字符).
因此
'A' 只是 'A'(包含 A 的 ASCII 值的单个字符)
而
"A" 是一个字符 array,包含两个字符 - 'A' 和 '\0'(因此是一个字符串)
" " 用于字符串,' ' 用于字符。因为A和B是 字符,我们将为它们使用单引号。
这就是为什么这种格式是正确的。
grade='A';
}else{
grade='B';
}
符号'
用于指定整型字符常量。例如 'A'
是一个整型字符常量,类型为 int
.
符号"
用于指定字符串文字。例如 "A"
是一个类型为 char[2]
的字符串文字。即字符串字面量是一个字符数组,存储方式如
{ 'A', '[=10=]' }
字符串文字包含以零终止字符 '[=21=]'
结尾的字符序列,这些字符也存储在字符串文字中。
表达式中使用的字符数组指示符被隐式(极少数例外)转换为指向其第一个类型 char *
或 const char *
.
这意味着在这个赋值语句中
grade="A";
具有数组类型 char[2]
的字符串文字 "A"
被转换为指向其第一个元素 'A'
的指针。结果,编译器发出一条消息,表明您正在尝试将指针分配给整数类型的对象。
你可以这样写
grade = "A"[0];
或
grade = *"A";
但这只会让代码的读者感到困惑,因为这样写起来会更简单明了
grade = 'A';
那就是不需要像"A"
那样使用整个数组(记住它在内部代表两个元素的数组{ 'A', '[=28=]' }
)只使用它的一个元素'A'
.