O tutorial de linguagem C mais forte da história ---- primeiro entendimento da linguagem C

contente

1. O que é linguagem C?

2. O primeiro programa em linguagem C

3. Tipos de dados

3. Variáveis, constantes

3.1 Como definir variáveis

3.2 Classificação de variáveis

3.3 Uso de variáveis

3.4 Escopo e Ciclo de Vida das Variáveis

3.5 Constantes

4. String + caractere de escape + comentário

4.1 Cordas

4.2 Caracteres de escape

5. Notas

6. Selecione Declaração

7. Declaração de Loop

8. Funções

9. Matrizes

9.1 Definição de Matriz

9.2 Subscrição de matrizes

 9.3 Usando Matrizes

10. Operadores

11. Palavras-chave comuns 

11.1 Definição de tipo de palavra-chave

11.2 A palavra-chave estática

11.2.1 Decorando variáveis ​​locais

11.2.2 Decorando variáveis ​​globais

11.2.3 Funções decoradas

12. #define definir constantes e macros

13. Ponteiros

13.1 Memória

13.2 Tamanho das variáveis ​​de ponteiro

14. Estruturas


1. O que é linguagem C?

A linguagem C é uma linguagem de programação de computador de propósito geral que é amplamente utilizada no desenvolvimento de baixo nível.

O objetivo do projeto da linguagem C é fornecer uma linguagem de programação que possa ser compilada de maneira fácil, lidar com memória de baixo nível, gerar uma pequena quantidade de código de máquina e ser executada sem nenhum suporte de tempo de execução. Embora a linguagem C forneça muitas funções de processamento de baixo nível, ela ainda mantém boas características de plataforma cruzada. Programas em linguagem C escritos em uma especificação padrão podem ser compilados em muitas plataformas de computador, incluindo alguns processadores embutidos (MCU ou MCU). plataformas operacionais, como supercomputadores.

Na década de 1980, a fim de evitar diferenças na gramática da linguagem C usada por vários desenvolvedores, o American National Bureau of Standards formulou um conjunto completo de gramáticas American National Standard para a linguagem C, chamado ANSI C, como o padrão inicial da linguagem C. idioma. .

Atualmente, em 8 de dezembro de 2011, o padrão C11 emitido pela International Organization for Standardization (ISO) e pela International Electrotechnical Commission (IEC) é o terceiro padrão oficial da linguagem C e o mais recente padrão da linguagem C, que melhor suporta caracteres chineses.Nomes de funções e identificadores de caracteres chineses realizam a programação de caracteres chineses até certo ponto.

A linguagem C é uma linguagem de programação de computador orientada a processos , diferente das linguagens de programação orientadas a objetos, como C++ e Java. Seus compiladores incluem principalmente Clang, GCC, WIN-TC, SUBLIME, MSVC, Turbo C, etc.

2. O primeiro programa em linguagem C

#include <stdio.h>//引用头文件,使我们可以使用C语言库本身就已经提供给我们的函数,即库函数
int main()//main()是主函数
{
    printf("hello world\n");//printf()是输出函数,'\n'是换行的意思
    return 0;//使程序退出,0的意思是程序正常退出
}
//解释:
//main函数是程序的入口
//一个工程中main函数有且仅有一个

Resultado da execução do programa:

3. Tipos de dados

char // tipo de dado de caractere

short // inteiro curto

int //forma

longo // inteiro longo

long long //Inteiro mais longo

float // número de ponto flutuante de precisão simples

double // número de ponto flutuante de precisão dupla

//A linguagem C tem um tipo string?

Resposta: A linguagem C em si não possui um tipo string.As strings que usamos em programas em linguagem C são na verdade arrays de caracteres, ou seja, vários caracteres constituem uma string!

Aqui estão duas maneiras de definir strings:

#include<stdio.h>
int main()
{
	char string1[] = "abc";
	char string2[] = { 'a','b','c' };
	return 0;
}

A diferença entre esses dois métodos não é explicada em detalhes aqui, e será explicada em detalhes mais adiante, só espero que todos possam entender!

  • Por que existe esse tipo?

Resposta: Por um lado, ele pode armazenar dados mais diversos para facilitar o processamento de dados; por outro lado, o motivo é economizar melhor nosso espaço de memória! Quanto ao motivo de você dizer isso, você pode aprender mais tarde sobre o espaço de memória ocupado por diferentes tipos de dados e pode ter uma compreensão mais profunda dele.

  • Qual o tamanho de cada tipo?
#include <stdio.h>
int main()
{
    printf("%d\n", sizeof(char));
    printf("%d\n", sizeof(short));
    printf("%d\n", sizeof(int));
    printf("%d\n", sizeof(long));
    printf("%d\n", sizeof(long long));
    printf("%d\n", sizeof(float));
    printf("%d\n", sizeof(double));
    printf("%d\n", sizeof(long double));
    return 0;
}

O seguinte é o resultado da execução do código:

Tipo de uso:

char ch = 'w';
int weight = 120;
int salary = 20000;

3. Variáveis, constantes

Alguns valores na vida são constantes (por exemplo: pi, sexo, número de identificação, tipo sanguíneo, etc.)

Alguns valores são variáveis ​​(ex: idade, peso, salário).

O valor constante é representado pelo conceito de constante na linguagem C, e o valor da variável é representado pela variável na linguagem C.

3.1 Como definir variáveis

int age = 150;
float weight = 45.5f;
char ch = 'w';

3.2 Classificação de variáveis

  • variável local

  • variável global

#include <stdio.h>
int global = 2019;//全局变量
int main()
{
    int local = 2018;//局部变量
    //下面定义的global会不会有问题?
    int global = 2020;//局部变量
    printf("global = %d\n", global);
    return 0;
}

O resultado de saída mostra:

Resumir:

Não há problema com a definição da variável local variável global acima!

Quando uma variável local e uma variável global têm o mesmo nome, a variável local é usada primeiro , que é o princípio da prioridade local que costumamos dizer!

3.3 Uso de variáveis

#include <stdio.h>
int main()
{
    int num1 = 0;
    int num2 = 0;
    int sum = 0;
    printf("输入两个操作数:>");
    scanf("%d %d", &num1, &num2);
    sum = num1 + num2;
    printf("sum = %d\n", sum);
    return 0;
}

Aqui está uma breve introdução às funções printf() e scanf()!

Função printf(): Função de saída. A saída entre aspas duplas será a saída, e % é o formato de saída da variável de controle, ou seja, desempenha um papel no controle de formato. Por exemplo, %d é imprimir e enviar a variável para a tela no formato de um inteiro e %c é um caractere. Imprima na forma de um tipo! Após a vírgula está a variável que queremos gerar. Todos precisam prestar atenção neste local. O controle de formato % deve corresponder ao significado das seguintes variáveis!

função scanf(): Função de entrada. Assim como o acima, % também é usado para controle de formato, mas a diferença entre este e o anterior é que o controle de formato de entrada é realizado aqui, como %d, que é armazenar o conteúdo de nossa entrada na forma de um integer em nossa variável. , aqui é o mesmo de antes, deve ser estritamente correspondente à variável após a vírgula, mas ainda há um ponto que precisa da atenção de todos. Por exemplo, quando digitamos, estamos no meio de % d %d two %d Existe um espaço para separar, então também precisamos separar entre duas variáveis ​​ao entrar pelo teclado, ou seja, nossa entrada deve corresponder estritamente ao conteúdo entre aspas duplas!

Como esta seção foi projetada para levá-lo a uma primeira olhada na linguagem C, não vou entrar em muitas explicações!

3.4 Escopo e Ciclo de Vida das Variáveis

(1) Escopo

Escopo é um conceito de programação.De um modo geral, um nome usado em um código de programa nem sempre é válido/disponível, e o escopo do código que limita a disponibilidade do nome é o escopo do nome.

  • 1. O escopo de uma variável local é o escopo local onde a variável reside.
  • 2. O escopo das variáveis ​​globais é todo o projeto.

(2) Ciclo de vida

O ciclo de vida de uma variável refere-se ao período de tempo entre a criação da variável e a destruição da variável

  • 1. O ciclo de vida de uma variável local é: o ciclo de vida de entrada no escopo começa e o ciclo de vida de saída do escopo termina.
  • 2. O ciclo de vida das variáveis ​​globais é: o ciclo de vida de todo o programa.

3.5 Constantes

As definições de constantes e variáveis ​​na linguagem C diferem na forma.

Constantes em linguagem C são divididas nas seguintes categorias:

  • constante literal
  • variável constante modificada por const
  • Constantes identificadoras definidas por #define
  • constante de enumeração

variáveis ​​constantes modificadas por const:

#include <stdio.h>
//举例
enum Sex
{
    MALE,
    FEMALE,
    SECRET
};
//括号中的MALE,FEMALE,SECRET是枚举常量
int main()
{
    //字面常量演示
    3.14;//字面常量
    1000;//字面常量

    //const 修饰的常变量
    const float pai = 3.14f;   //这里的pai是const修饰的常变量
    pai = 5.14;//是不能直接修改的!会报警告!!!

    //#define的标识符常量 演示
#define MAX 100
    printf("max = %d\n", MAX);

    //枚举常量演示
    printf("%d\n", MALE);
    printf("%d\n", FEMALE);
    printf("%d\n", SECRET);
    //注:枚举常量的默认是从0开始,依次向下递增1的
    return 0;
}

Observação:

O pai no exemplo acima é chamado de variável constante modificada por const. A variável constante modificada por const na linguagem C apenas restringe a variável pai de ser alterada diretamente no nível de sintaxe, mas pai é essencialmente uma variável, então é chamada de variável constante.

4. String + caractere de escape + comentário

4.1 Cordas

"hello bit.\n"

Essa string de caracteres entre aspas duplas é chamada de String Literal, ou simplesmente string.

Nota: O final da string é um caractere de escape \0. Ao calcular o comprimento da string, \0 é a marca final e não é contado como o conteúdo da string.

#include <stdio.h>
//下面代码,打印结果是什么?为什么?(突出'\0'的重要性)
int main()
{
    char arr1[] = "bit";
    char arr2[] = { 'b', 'i', 't' };
    char arr3[] = { 'b', 'i', 't','\0'};
    printf("%s\n", arr1);
    printf("%s\n", arr2);
    printf("%s\n", arr3);
    return 0;
}

 Agora podemos ver que temos um formulário ilegível quando produzimos arr2, por que isso acontece? Como arr2 não contém a marca final da string, ou seja, '\0', os caracteres ilegíveis acima aparecerão!

Perceber:

1. Quando usamos a função printf() para saída na forma de uma string, a saída só irá parar quando '\0' for encontrado!

2. Quando usamos a forma acima de arr1 para definir uma string, a string em "" inclui automaticamente a marca final da string, ou seja, '\0'!

3. Quando usamos o método de definição de string {}, devemos lembrar de adicionar a marca final da string, embora às vezes não a usemos, mas é isso que devemos fazer, e isso também é qualificado As qualidades necessárias de programadores, é claro, às vezes não precisam ser adicionados. Durante o período de iniciante, é recomendável adicioná-los.

4.2 Caracteres de escape

Suponha que queremos imprimir um diretório na tela: c:\code\test.c

Como devemos escrever código?

#include <stdio.h>
int main()
{
    printf("c:\code\test.c\n");
    return 0;
}

Mas, na verdade, o resultado da impressão é este:

 Aqui temos que mencionar caracteres de escape. Caracteres de escape, como o nome sugere, devem mudar o significado.

Veja alguns caracteres de escape abaixo.

 Aqui está um exercício simples:

#include <stdio.h>
int main()
{
    //问题1:在屏幕上打印一个单引号',怎么做?
    //问题2:在屏幕上打印一个字符串,字符串的内容是一个双引号“,怎么做?
    printf("%c\n", '\'');
    printf("%s\n", "\"");
    return 0;
}

O seguinte é uma questão de teste escrito, leve todos para entendê-lo!

//程序输出什么?
#include <stdio.h>
int main()
{
    printf("%d\n", strlen("abcdef"));
    // \62被解析成一个转义字符
    printf("%d\n", strlen("c:\test\628\test.c"));
    return 0;
}

Aqui está o resultado da nossa execução no VS:

 Por que você obtém o resultado acima?

Vamos primeiro dar uma olhada em strlen(), a função desta função é encontrar o comprimento da string, e ela irá parar quando encontrar a marca final da string, mas você precisa prestar atenção que a marca final da string string '\0' não faz parte do comprimento da string.

Vamos ver o código acima primeiro. O conteúdo da string entre colchetes strlen() é abcdef e a marca final da string '\0', mas como a marca final da string não faz parte do comprimento da string, a string O comprimento é 6.

Em seguida, vamos ver o próximo trecho de código. Já aprendemos sobre caracteres de escape. Aqui, precisamos fornecer um conceito claro. O caractere de escape é considerado um caractere, mesmo que sua forma seja \ seguida por 1 ou vários caracteres , mas a função strlen() o trata apenas como um caractere. Então, por que nosso compilador fornece os resultados acima não é difícil de entender, e os resultados acima não são difíceis de entender, \t é um caractere de escape, \62 também é um caractere de escape, por que 8 não é seguido por um bloco Tecido de lã? Porque \ é seguido por octal, ou seja, apenas números de 0 a 7, não 8, então 8 não está incluído! Há também um caractere de escape fornecido após \t! O resultado final é 14!

5. Notas

  1. Código desnecessário no código pode ser excluído diretamente ou comentado 
  2. Algum código no código é mais difícil de entender, você pode adicionar um texto de comentário

por exemplo:

#include <stdio.h>
int Add(int x, int y)
{
    return x + y;
}
/*C语言风格注释
int Sub(int x, int y)
{
    return x-y;
}
*/
int main()
{
    //C++注释风格
    //int a = 10;
    //调用Add函数,完成加法
    printf("%d\n", Add(1, 2));
    return 0;
}

As anotações vêm em dois sabores:

  • Comentários no estilo C /*xxxxxx*/ Defeito: Não é possível aninhar comentários
  • Comentários no estilo C++//xxxxxxxx podem comentar em uma linha ou em várias linhas

6. Selecione Declaração

Se você estudar muito, receber uma boa oferta durante o recrutamento escolar e chegar ao auge de sua vida, sua namorada continuará ao seu lado!

Se você não estuda, formatura significa desemprego, sua namorada terminou com você!

Esta é a escolha!

#include <stdio.h>
int main()
{
    int coding = 0;
    printf("你会去敲代码吗?(选择1 or 0):>");
    scanf("%d", &coding);
    if (coding == 1)
    {
        printf("坚持,你会有好offer,女朋友陪在身边\n");
    }
    else
    {
        printf("毕业即失业,女朋友跟你分手\n");
    }
    return 0;
}

 Aqui está uma captura de tela da execução:

7. Declaração de Loop

Como implementar um loop em linguagem C?

  • enquanto declaração - explicar
  • para declaração (falar mais tarde)
  • do ... while declaração (posteriormente) 
#include <stdio.h>
int main()
{
    int line = 0;
    while (line <= 20000)
    {
        line++;
        printf("我要继续努力敲代码\n");
    }
    if (line > 20000)
        printf("好offer\n");
    return 0;
}

8. Funções

#include <stdio.h>
int main()
{
    int num1 = 0;
    int num2 = 0;
    int sum = 0;
    printf("输入两个操作数:>");
    scanf("%d %d", &num1, &num2);
    sum = num1 + num2;
    printf("sum = %d\n", sum);
    return 0;
}
上述代码,写成函数如下:
#include <stdio.h>
int Add(int x, int y)
{
    int z = x + y;
    return z;
}
int main()
{
    int num1 = 0;
    int num2 = 0;
    int sum = 0;
    printf("输入两个操作数:>");
    scanf("%d %d", &num1, &num2);
    sum = Add(num1, num2);
    printf("sum = %d\n", sum);
    return 0;
}

O recurso da função é simplificar o código e reutilizá-lo.

9. Matrizes

Como armazenar números 1-10?

A linguagem C dá a definição de um array: uma coleção de elementos do mesmo tipo.

9.1 Definição de Matriz

int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素

9.2 Subscrição de matrizes

A linguagem C estipula que cada elemento do array tem um subscrito, e o subscrito começa em 0.

Arrays podem ser acessados ​​por subscrito.

por exemplo:

int arr[10] = {0};
//如果数组10个元素,下标的范围是0-9

 9.3 Usando Matrizes

#include <stdio.h>
int main()
{
    int i = 0;
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    for (i = 0; i < 10; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

O resultado da execução é mostrado na figura a seguir:

10. Operadores

operadores aritméticos

  • + acrescentar
  • - reduzir
  • * leva
  • / remover
  • % Remanescente

Existem muitos operadores, então não vou listar todos aqui! Falaremos sobre isso mais tarde!

#include<stdio.h>
int main()
{
	int a = 10;
	int b = 5;
	int c = 3;
	printf("%d\n", a + b);
	printf("%d\n", a - b);
	printf("%d\n", a * b);
	printf("%d\n", a / b);
	printf("%d\n", a % c);
	return 0;
}

Segue o resultado da execução:

11. Palavras-chave comuns 

  • auto  
  • pausa  
  • caso  
  • Caracteres
  •  const  
  • Prosseguir  
  • predefinição  
  • Faz  
  • Duplo
  • senão  
  • enumerar
  • externo
  • flutuador  
  • por  
  • vamos para  
  • E se  
  • int  
  • grandes  
  • registro    
  • Retorna  
  • baixo  
  • assinado
  • tamanho de  
  • estático
  • estrutura  
  • trocar  
  • typedef
  • União  
  • não assinado  
  • vazio  
  • volátil  
  • enquanto

Sem entrar em uma introdução abrangente primeiro, vou apresentá-lo passo a passo! Aqui está uma breve introdução a alguns!

11.1 Definição de tipo de palavra-chave

Typedef Como o nome indica, é uma definição de tipo, que deve ser entendida como uma renomeação de tipo.

por exemplo:

typedef unsigned int uint_32;
int main()
{
    //观察num1和num2,这两个变量的类型是一样的
    unsigned int num1 = 0;
    uint_32 num2 = 0;
    return 0;
}

11.2 A palavra-chave estática

Em linguagem C:

estático é usado para modificar variáveis ​​e funções

  1. Variáveis ​​locais decoradas - chamadas de variáveis ​​locais estáticas
  2. Variáveis ​​globais decoradas - chamadas variáveis ​​globais estáticas
  3. Função decorada - chamada função estática

11.2.1 Decorando variáveis ​​locais

//代码1
#include <stdio.h>
void test()
{
    int i = 0;
    i++;
    printf("%d ", i);
}
int main()
{
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        test();
    }
    return 0;
}
//代码2
#include <stdio.h>
void test()
{
    //static修饰局部变量
    static int i = 0;
    i++;
    printf("%d ", i);
}
int main()
{
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        test();
    }
    return 0;
}

O resultado da execução do código 1:

 O resultado da execução do código 2:

Em conclusão:

  • A modificação estática de variáveis ​​locais altera o ciclo de vida das variáveis, de modo que as variáveis ​​locais estáticas ainda existem fora do escopo e o ciclo de vida não termina até o final do programa.

11.2.2 Decorando variáveis ​​globais

Nota: add.c e test.c representam dois arquivos de origem diferentes

//代码1
//add.c
int g_val = 2018;
//test.c
int main()
{
    printf("%d\n", g_val);
    return 0;
}
//代码2
//add.c
static int g_val = 2018;
//test.c
int main()
{
    printf("%d\n", g_val);
    return 0;
}

O código 1 é normal, o código 2 terá um erro de conectividade ao compilar.

Em conclusão:

  •  Uma variável global é modificada por estática, de modo que a variável global só pode ser usada neste arquivo de origem e não pode ser usada em outros arquivos de origem.

11.2.3 Funções decoradas

//代码1
//add.c
int Add(int x, int y)
{
    return c + y;
}
//test.c
int main()
{
    printf("%d\n", Add(2, 3));
    return 0;
}
//代码2
//add.c
static int Add(int x, int y)
{
    return c + y;
}
//test.c
int main()
{
    printf("%d\n", Add(2, 3));
    return 0;
}

O código 1 é normal, o código 2 terá um erro de conectividade ao compilar.

Em conclusão:

  • Uma função é modificada por estática, de modo que esta função só pode ser usada neste arquivo de origem e não pode ser usada em outros arquivos de origem.

12. #define definir constantes e macros

//define定义标识符常量
#define MAX 1000
//define定义宏
#define ADD(x, y) ((x)+(y))
#include <stdio.h>
int main()
{
    int sum = ADD(2, 3);
    printf("sum = %d\n", sum);

    sum = 10 * ADD(2, 3);
    printf("sum = %d\n", sum);

    return 0;
}

resultado da operação:

13. Ponteiros

13.1 Memória

A memória é uma memória particularmente importante no computador, e a operação dos programas no computador é realizada na memória .

Portanto, para usar a memória de forma eficiente, a memória é dividida em pequenas unidades de memória e o tamanho de cada unidade de memória é de 1 byte .

Para acessar efetivamente cada unidade de memória, a unidade de memória é numerada, e esses números são chamados de endereço da unidade de memória .

As variáveis ​​são criadas na memória (o espaço é alocado na memória) e cada unidade de memória possui um endereço, portanto, as variáveis ​​também possuem endereços. Retire o endereço da variável da seguinte forma:

#include <stdio.h>
int main()
{
    int num = 10;
    &num;//取出num的地址
       //注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
    printf("%p\n", &num);//打印地址,%p是以地址的形式打印
    return 0;
}

Como armazenar o endereço, você precisa definir uma variável de ponteiro.

int num = 10;
int *p;//p为一个整形指针变量
p = &num;

Exemplos de uso do ponteiro:

#include <stdio.h>
int main()
{
    int num = 10;
    int* p = &num;
    *p = 20;
    return 0;
}

 Tomando o ponteiro inteiro como exemplo, ele pode ser estendido para outros tipos, como:

#include <stdio.h>
int main()
{
    char ch = 'w';
    char* pc = &ch;
    *pc = 'q';
    printf("%c\n", ch);
    return 0;
}

13.2 Tamanho das variáveis ​​de ponteiro

#include <stdio.h>
//指针变量的大小取决于地址的大小
//32位平台下地址是32个bit位(即4个字节)
//64位平台下地址是64个bit位(即8个字节)
int main()
{
    printf("%d\n", sizeof(char*));
    printf("%d\n", sizeof(short*));
    printf("%d\n", sizeof(int*));
    printf("%d\n", sizeof(double*));
    return 0;
}

O acima é a plataforma de 32 bits!

 O acima é uma plataforma de 64 bits!

 Conclusão: O tamanho do ponteiro é de 4 bytes em plataformas de 32 bits e 8 bytes em plataformas de 64 bits.

14. Estruturas

A estrutura é um ponto de conhecimento particularmente importante na linguagem C. A estrutura torna a linguagem C capaz de descrever tipos complexos. Por exemplo, ao descrever um aluno, o aluno inclui: nome + idade + sexo + número do aluno. Apenas estruturas podem ser usadas para descrevê-los aqui.

Por exemplo:

struct Stu
{
    char name[20];//名字
    int age;      //年龄
    char sex[5];  //性别
    char id[15]; //学号
};

Inicialização da estrutura:

//打印结构体信息
struct Stu s = { "张三", 20, "男", "20180101" };
//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);
//->操作符
struct Stu* ps = &s;
printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps -
> id);

Acho que você gosta

Origin blog.csdn.net/m0_57304511/article/details/122280010
Recomendado
Clasificación