Ir ao conteúdo

Posts recomendados

Postado
Estou na duvida de como se usa const char* em alguns lugares tem char* const e alguns falam que é o mesmo que string nome="nome";

#include<iostream>
using namespace std;

int main() {

 

    
    const char* nome="Alexa";
    for (int i=0;i<=sizeof(nome);i++){         
        cout << nome[i] << endl;



    return 0;
}
Nesse código aqui const char* funciona mas string não por que ?

 

Postado

"Nesse código aqui const char* funciona mas string não por que ?"

Precisa incluir a classe string.

#include <iostream>
#include <string> //< Classe string

using namespace std;
int main(){
    	const string nome = "Alexa";

    	for (size_t c = 0; nome.length () > c; ++c){         
		cout << nome.at (c) << endl;
	}
	return 0;
}

 

 

Se preferir pode aplicar uma interpretação com versão compactada de FOR (C++11) também de limites no arranjo da classe.

for (auto c : nome){         
		cout << c << endl;
	}

 

Postado

const nada tem a ver com char*

 

usando os dois juntos apenas indica ao compilador que area apontada pela variável não vai ser alterada.

Desse modo o compilador já gera erro quando tenta atribuir algo por exemplo.

 

No caso de char* const é bem importante
 

O que acontece é que se você tem uma função que recebe um parâmetro char* como

int	uma_funcao(char*, int);

E escreve

int uma_funcao( char* mensagem, int valor )
{
    printf("Mensagem: '%s' valor %d\n", mensagem, valor);
    return 0;
};

 Você pode chamar 

	int res = uma_funcao("valor da contagem: ", -345);

Até aí tudo certo. Mas aí vem o diretor e diz para converter a primeira letra para maiúscula "porque é o que o mercado quer"

E você faz o simples:
 

int uma_funcao( char* mensagem, int valor )
{
    if( (mensagem[0] >= 'a') && (mensagem[0]<= 'z') )
        mensagem[0] -= 32; // equivale a converter para maiuscula
    printf("Mensagem: '%s' valor %d\n", mensagem, valor);  
    return 0;
};

se você rodar isso seu programa deve cancelar com uma mensagem sobre violacão de acesso ou algo assim...

Porque nesse caso a função foi chamada com uma constante, um literal. Não dá para alterar

 

Mas se você declara como const e tenta

int uma_funcao( const char* mensagem, int valor )
{
    if( (mensagem[0] >= 'a') && (mensagem[0]<= 'z') )
        mensagem[0] -= 32; // equivale a converter para maiuscula
    printf("Mensagem: '%s' valor %d\n", mensagem, valor);  
    return 0;
};

o programa desta vez não compila e te avisa porque. Antes dele rodar na máquina de alguém e dar erro. Veja um exemplo:
 

image.thumb.png.1bc3aa160f0bed40e8bb2c729cf88e66.png

 

Claro que a mensagem sai em português se seu ambiente usa essa linguagem. Mas veja a linha vermelha e a mensagem do erro se põe o ponteiro do mouse lá: "expressão deve ser um valor modificável" assim que você tenta alterar uma letra do campo

Claro que esse é um exemplo simplista, mas acho que dá pra entender. 

Tem outras muitas razões para usar isso. Uma importante é que ao saber que isso não pode mudar o compilador pode otimizar o código e mover as constantes para outras partes do código e conseguir alguma vantagem.

 

Em C++ você também pode declarar métodos e classes inteiras const, e pode declarar o valor apontado como const também...

 

 

 

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!