En C/C++, ¿cuál es la diferencia entre el código de dos líneas siguientes:¿Cuál es la diferencia entre "hola" y {"hola"}?
char *str1="hello";
char *str2={"hello"};
En C/C++, ¿cuál es la diferencia entre el código de dos líneas siguientes:¿Cuál es la diferencia entre "hola" y {"hola"}?
char *str1="hello";
char *str2={"hello"};
por la norma 2011 C, cláusula 6.7 .9 Inicialización, párrafo 11: "El inicializador de un escalar debe ser una expresión única, opcionalmente encerrado entre llaves ..."
Eso es todo. No hay diferencia semántica; las llaves simplemente pueden estar presentes o pueden estar ausentes, sin ningún cambio en el significado.
estilo sólo en este caso. Ambos dan como resultado lo mismo, y ambos tienen mala forma. Deberías haber usado const char * str1="hello";
.
{"hello"} ¿no se considera matriz? como sabemos para definir la matriz que escribimos en {} m simplemente confunda esto y qué si char * str2 = {"hello", "hola"}; en este caso – Pratik
@Pratik, todos los tipos escalares también aceptan inicializadores '{}'. –
@JensGustedt Por favor, ¿cuál es la definición de los tipos escalares? – yejinxin
No hay diferencia entre una matriz y una "cadena", ya que una cadena es una matriz de caracteres.
Ver https://stackoverflow.com/a/3462768/153225.
Las llaves son redundantes.
Generating ensamblador formar el siguiente código con "gcc -S" confirma que generan exactamente lo mismo (con una constante ligeramente diferente en cada caso):
#include <iostream>
using namespace std;
void test1() {
const char *str1="hello1";
cout << str1 << endl;
}
void test2() {
const char *str2={"hello2"};
cout << str2 << endl;
}
int main() {
test1();
test2();
}
ninguna diferencia. ambos rompen la compilación –
@ BЈовић Al menos en C++, pero no en C (y quién sabe qué * "C/C++" * es). –
@ChristianRau - Sé exactamente lo que significa "C/C++", y sospecho que tú también. –