【发布时间】:2021-11-23 07:36:25
【问题描述】:
我正在学习指针和字符串。 我明白了,
- 指针和数组/字符串具有相似的行为。
- 数组[]、*数组、&数组[0]。它们都是一体的。
为什么这段代码中的三个语句有效,而char * help 一个无效?
#include <stdio.h>
void display(char*help){
for(int i=0; help[i]!='\0'; i++){
printf("%c", help[i]);
}
}
int main(){
// char help[] = "Help_Me"; //Works
// char help[] = {'H','e','l','p','_','M','e','\0'}; //Works
// char *help = "Help_Me"; //Works
char *help = {'H','e','l','p','_','M','e','\0'}; //Error
display(help);
}
错误信息:
警告:从 'int' 初始化 'char *' 会使指针从整数变为无强制类型转换
警告:标量初始化器中的多余元素
【问题讨论】:
-
char *help = {'H','e','l','p','_','M','e','\0'};真的等同于char *help = '\0';和任何其他文字字符一样,'\0'将被提升为int。 -
您不能使用初始化列表来初始化指针。您可以使用复合数组文字来做到这一点。 en.cppreference.com/w/c/language/compound_literal
-
不,
array[]。*array和&array[0]在含义和拼写上都是不同的。 -
array[] , *array , &array[0] 根本不一样。