Quelle est la différence entre char * c code> et
char * c code>? Quel est le problème dans ce code?
4 Réponses :
en C ++, la chaîne littéral est mise en œuvre par Cons-Char *.
De plus, le compilateur ne distinguera pas et p> char *c;
Il n'y a absolument pas de différence entre char * c code> et
char * c code> Le problème avec votre code est que "helloworld" est un const Char * afin que vous ayez à jetez-le à un char * ou rangez-le dans une variable Cons-Char. De plus, je ne définirais pas cette macro, stockez simplement ce numéro dans une variable (Constexpr variable si vous souhaitez une évaluation de l'heure de compilation) Il est beaucoup plus facile de lire
#include<iostream>
using namespace std;
int main() {
constexpr int num = 2;
char* c = (char*)"HelloWorld!!!";
const char* c2 = "HelloWorld!!!";
cout << *(c + num);
return 0;
}
; est manquant dans int Num = 2.
Techniquement "helloworld !!!" code> est un
const char [14] code>, pas un
const char * code>, bien qu'il puisse être converti implicitement en un
const char * code>.
Et je suggère d'utiliser Constexpr int Num = 2; , si le #define a été placé intentionnellement pour signifier constante d'évaluation de la compilée.
numéro code> devrait être dans une variable de consexpr.
Si vous compilez votre programme avec le drapeau -wall code> activé, vous verrez le message d'erreur suivant:
auto c = "HelloWorld!!!"
Il n'y a pas de différence entre Ce que vous faites dans votre code est le suivant: vous créez une matrice, puis vous imprimez quelque chose sur l'adresse C + 2. C'est« L ». Quand je cours, je reçois ça. Comme quelqu'un l'a dit avant de devoir faire attention car Si vous voulez vraiment changer cette chaîne, vous pouvez faire quelque chose comme ceci: p> char * code> et
char * code>, mais il y a la différence entre
char et code> et
char * code >, s'il vous plaît, veuillez éditer votre question et être plus précis, dites ce que vous attendez-vous, car votre code fait ce que vous avez écrit, alors je ne sais pas si vous souhaitez peut-être concaténer une gamme de caractères avec 2. S'il s'agit de la Cas, que je vous suggérerai d'utiliser
const char * code> ne peut pas être utilisé pour initialiser le char *, référence . p>
#include<iostream>
#include <stdlib.h>
#define num 2
using namespace std;
int main() {
const char* c = "HelloWorld!!!";
char* str;
int n = 0;
while (true)
{
if (c[n++] == '\0') // '\0' is character for terminating string
{
break;
}
}
str = (char*)calloc(n + 1, sizeof(char));
for (int i = 0; i <= n; i++)
{
if (i < n - 1)
{
str[i] = c[i];
}
else
{
if (i == n - 1)
{
str[i] = (char)('0' + num);// with this sum you wil get ascii code of '2' and write it in str + n - 1
}
else
{
str[i] = '\0';
}
}
}
cout << str;
//cout << *(c + num);
return 0;
}
Votre compilateur aurait dû vous demander d'ajouter un
const code> à la déclaration de
C code>.
Que voulez-vous dire
& char * c code>?
Quel est le problème dans ce code? I> à côté du manquant
const code>, il n'y a rien de mal avec le code. Il génère
l code> ( démo sur Coliru ) qui est le Troisième lettre dans
"helloworld !!!" code> (c.-à-d. Le caractère à
C + 2 code>). Qu'est-ce que vous attendiez?
Si vous souhaitez imprimer la chaîne littéral des troisième lettres jusqu'à la fin, vous devez supprimer le * devant C + NUM.
Comme les réponses ont noté, il n'y a pas de différence entre
Char * C Code> et
Char * C CODE> - mais même si vous collez avec le premier! Le
* code> appartient à la variable, pas le type. Par exemple, si vous avez
char * c, d, e code>, alors seul
C code> est le
char * code> .... d et e sont de
Char code> seulement.
Est-ce que cela répond à votre question? Déclaration des pointeurs; Astérisque à gauche ou à droite de l'espace entre le type et le nom?
@RACRAMAN C'est comme des espaces vs. onglets. Les deux formats ont leur validité. Je dirais que le type est
char * code>, car c'est la manière dont le compilateur le voit, pas
char code> qui se trouve être un pointeur. Quelle que soit la forme que vous préférez, il est préférable d'être cohérent à ce sujet et d'utiliser toujours la même approche. Déclarer plusieurs variables à la fois demander des problèmes, comme vous le souhaitez.
Conseil: vous voulez presque toujours dire
c [num] code> au lieu de
* (c + num) code>.
@tadman Le point est que le compilateur associe le * avec la variable, c'est pourquoi d et E ne sont que
char code> (et bien sûr que WhitSpace est ignoré, c'est pourquoi
Char * C code> et
char * c code> sont acceptés). Les styles de codage doivent suivre ce que le compilateur fait, sinon les gens peuvent être mordus par d et E ne pas être ce qu'ils pensent.