Notas de estudo da linguagem C (1)

A melhor época para plantar uma árvore é há dez anos, seguida agora!

Eu aprendi sobre matrizes antes e acredito que você já tenha ouvido a palavra matriz de caracteres! Vamos aprender sobre constantes de string da linguagem C (chamadas literais de string na linguagem C) e variáveis ​​de caracteres.

Um, literal de string

1. Sequências de escape em literais de string

Literais de string também podem conter sequências de escape (\ ne outras sequências de escape). Observação: as sequências de escape para números hexadecimais e octais são mais complicadas, portanto, use-as com cuidado!

Por exemplo:

"hello\nworld\n"

O resultado é: olá

                  mundo

2. Continuação de variáveis ​​de string

Às vezes, a string literal é muito longa para ser colocada em uma linha sozinha, geralmente um \ termina no final, então a linguagem C pode continuar digitando na próxima linha. Mas o efeito desse recuo não é óbvio. Um exemplo é o seguinte:

#include<stdio.h>
int main(void)
{
	printf("ABCDE\
	FGHI\n");
	
	printf("abcde\
fghi\n");
	printf("123"
	"456\n");
}

Pode-se ver que se você deseja imprimir a string em uma linha ao usar \, não há como garantir o formato de indentação, então há uma maneira de continuar a string literal, ou seja, "..." ". .. "dois consecutivos podem ser combinados na mesma string.

3. Armazene o literal de string:

Essencialmente, a linguagem C trata os literais de string como matrizes de caracteres. (Mas a matriz de caracteres não é uma string! A string terá um \ 0 no final!)

Quando uma string literal de comprimento n aparece na linguagem C, a linguagem C alocará um espaço de comprimento n + 1 para ela! Esta memória é usada para armazenar os caracteres no literal de string e o espaço extra é usado para marcar o caractere extra (caractere vazio) no final da string. Este \ 0 é o sinal do final do literal de string, que tem escape Substitua o caractere \ 0. Observação: em vez de '0', o valor do código do caractere nulo é 0 e o código ASCII do caractere zero é 48.

Por exemplo: a string literal "abc" é armazenada como uma matriz com 4 caracteres (a, b, c, \ 0)

          Literal de string "" (literal de string pode estar vazio. E um único caractere vazio é armazenado como \ 0)

Então, o que passamos quando usamos literais de string para passar parâmetros para a função printf? Uma vez que é tratado como um array, o compilador naturalmente o considera um ponteiro do tipo char *.

Por exemplo: printf ("abc");

          Quando a função printf é chamada, o endereço de "abc" (ou seja, o ponteiro para a unidade de memória que armazena a letra a) é passado

Dê uma olhada no código a seguir e seus resultados de execução

#include<stdio.h>

int main()
{
	char *a,*b,c;
	a = "abc";
	b = "";
	c = '0';
	
	printf("a = %s\n",a);	
	printf("b[0] = %d\n",b[0]);
	printf("b = %s\n",b); 
	printf("c = %c\n",c);
	return 0;
}

"" Há apenas um elemento \ 0 na string vazia, que é o inteiro 0, mas não a constante de caractere '0'! ! !

4. Operação de literais de string

Acabamos de ver este código

#include<stdio.h>

int main()
{
	char *a,*b,c;
	a = "abc";
	b = "";
	c = '0';
	
	printf("a = %s\n",a);	
	printf("b[0] = %d\n",b[0]);
	printf("b = %s\n",b); 
	printf("c = %c\n",c);
	return 0;
}

Geralmente, literais de string podem ser usados ​​onde ponteiros char * podem ser usados ​​em linguagem C. Por exemplo, o literal de string pode aparecer no lado direito do símbolo de atribuição, como char * a acima, a = "abc". Essa operação de atribuição faz com que o ponteiro aponte para o primeiro caractere da string.

A linguagem C permite ponteiros subscritos, portanto, também podemos subscrever literais de string. Por exemplo, char ch; ch = "abc" [0].

Nota: Não modifique o literal da string! (O literal de string está localizado em um lugar chamado "segmento de código" no programa e é somente leitura, então não vou falar sobre isso aqui)

Duas, variáveis ​​de string

Em algumas linguagens de programação, um tipo de dados é fornecido especificamente para variáveis ​​de string. Na linguagem C, geralmente usamos arrays unidimensionais para armazenar strings (mas lembre-se de garantir que a string termine com um caractere nulo !!!)

Quando escrevemos funções de processamento de string, também devemos considerar o manuseio de caracteres nulos!

# define STR_LEN 10

  ...

char str [STR_LEN + 1]; // Aqui, STR_LEN é definido como 10 enfatizado que str pode armazenar uma string de até 10 caracteres, e então STR_LEN + 1 é usado para armazenar caracteres nulos na declaração do array str.

Obviamente, declarar uma matriz de caracteres com comprimento STR_LEN + 1 não significa que ela seja sempre usada para armazenar uma string com comprimento STR_LEN. O comprimento da string depende da posição do caractere vazio, e não do caractere array que armazena o comprimento da string. STR_LEN +1 apenas limita o comprimento máximo da string.

1. Inicializar variáveis ​​de string

Pode ser inicializado no momento da declaração

char str1[] = "hello world"

Como devemos garantir que o comprimento do array seja maior do que o comprimento da string literal, podemos omitir seu comprimento. Nesse caso, o compilador adicionará automaticamente um caractere nulo a ele.

O literal de string "hello world" é copiado para o array str1 e, em seguida, o compilador adiciona caracteres nulos automaticamente, para que possa ser considerado uma variável de string.

Claro que existem outros métodos de inicialização, mas lembre-se do acima, o acima é o mais comumente usado.

2. Matriz de caracteres e ponteiro de caracteres

char *a = "hello world"
char a[] = "hello world"

Essas duas declarações parecem ser as mesmas. A primeira declara um ponteiro a e a última declara um array a. Ambas podem ser consideradas strings. No entanto, há uma grande diferença entre os dois e não podemos pensar que os dois anteriores sejam intercambiáveis.

Ao declará-lo como um ponteiro, não podemos modificar o literal da string. (Lembre-se do snippet de código na área somente leitura mencionada anteriormente)

Nota: A variável de ponteiro deve ser inicializada antes do uso!

3. Uso das funções puts (), gets (), printf (), scanf (), fgets ().

 

 

Acho que você gosta

Origin blog.csdn.net/qq_51182221/article/details/115217465
Recomendado
Clasificación