Pointers and Arrays in C
Um tutorial em vídeo gratuito de Tim Buchalka's Learn Programming Academy
Professional Programmers and Teachers - 2.28M students
62 cursos
2.358.383 alunos
Saiba mais sobre o curso completo
C Programming For Beginners - Master the C Language
C Programming will increase career options. Become a better dev in other languages by learning C. Pointers explained
25:36:08 de vídeo sob demanda • Atualizado em Abril 2025
Understand the fundamentals of the C Programming Language
Make yourself more marketable for entry level programming positions
Create your first C Application
Learn one of the most popular, widly used languages in the world
Understand variables and the different data types
Apply for real-time programming positions
Understand the core language that most modern languages are based on
Learn how to write high-quality code
Português [Automático]
Olá, seja bem-vindo de volta. Nesta palestra, quero falar sobre a relação entre ponteiros e matrizes. Existe uma relação forte e precisamos entender essa relação antes de podermos realmente falar sobre aritmética de ponteiros. Então vamos começar. Uma matriz é uma coleção de objetos do mesmo tipo aos quais você pode se referir usando um único nome. Sabemos que agora somos muito bons em matrizes. Estamos usando a matriz de caracteres por algumas seções agora. É uma matriz que você pode acessar usando um índice ou subscrito dentro desses colchetes. Nós nos lembramos disso. Sabemos que os arrays são baseados em zero, eles começam do zero. Mas, novamente, é apenas uma maneira de manter vários meses com o mesmo nome de variável. Um ponteiro é uma variável que tem seu valor, um endereço de memória como seu valor, e pode fazer referência a outra variável ou constante de um determinado tipo. Também devemos estar bem claros neste ponto sobre o que é um ponteiro. Ele apenas contém um endereço de memória. Você pode usar um ponteiro para manter o endereço de diferentes variáveis em momentos diferentes. Mas você tem que ter o mesmo tipo. Um ponteiro int deve apontar para restaurar o endereço de um tipo int. Matrizes e ponteiros parecem bastante diferentes, mas estão intimamente relacionados e às vezes podem ser usados de forma intercambiável, especialmente com a matriz de caracteres. Na verdade, você pode criar um caractere e lembrar que é uma string e pode criar um ponteiro de caractere que é essencialmente a mesma coisa. Existem apenas pequenas diferenças se você alocar ou não memória e liberá-la com um ponteiro de caractere. Com um array de caracteres, você não precisa fazer isso, mas um caractere a também tem tamanho fixo. Portanto, se você criar uma string de matriz de caracteres com 20 como tamanho, poderá armazenar apenas 19 caracteres. Com o ponteiro de caracteres, você pode usar o gerenciamento de memória dinâmica e pode aumentar ou diminuir o tamanho, pode ser mais eficiente em relação à memória. Mas um dos usos mais comuns de ponteiros em c é como ponteiros para matrizes. É quando você usa ponteiros com mais frequência, especialmente para personagens. O ponteiro de caracteres é igual a uma matriz de caracteres. Os principais motivos para usar ponteiros para apagar são os de conveniência de notação e de eficiência do programa. Portanto, você pode usar um array ou um ponteiro em muitos casos, exceto quando estiver falando sobre gerenciamento de memória dinâmica. Mas na maioria dos casos você pode. E realmente a única diferença é a sintaxe, a notação. É se você usa ou não um subscrito para acessar um elemento ou se você usa aritmética de pontos ou não usa o ponteiro de caractere para apontar para o endereço específico desse elemento. Também é mais eficiente usar ponteiros de caracteres. Ponteiros para matrizes geralmente resultam em código que usa menos memória e executa mais rápido. Portanto, você deseja usar um ponteiro para caracteres tanto quanto possível e um ponteiro para outros tipos de dados também. Porque é mais rápido e usa menos memória. Ponteiros sobre matrizes em sua maior parte. Se você tiver uma matriz de 100 inteiros, sabemos o que isso significa, basta dizer que o valor int é 100. 100 é o tamanho. Isso significa que você pode armazenar 100 inteiros nessa matriz. Você também pode definir um ponteiro. Vamos chamá-lo de ponteiro de valores, uma vez que aponta para o array de valores e pode ser usado para acessar os inteiros contidos neste array. Então, nós apenas dizemos o ponteiro dos valores instar. Sabemos como declarar um ponteiro neste ponto. Ao definir um ponteiro que é usado para apontar os elementos da matriz, você não designa o ponteiro como um ponteiro de tipo para a matriz. Até este ponto, tudo o que ouvimos é um ponteiro para o fim e um ponteiro para o dobro. Mas quando você está usando matrizes, você não diz matriz pontiaguda. Esse ponteiro real está apontando para um elemento específico contido na matriz. Portanto, mantenha isso em mente. Na verdade, não é a matriz inteira quando você limpa um ponteiro com o endereço dos valores. Portanto, para definir o ponteiro de valores para apontar para o primeiro elemento da matriz de valores, tudo o que você precisa fazer é dizer que os valores apontam ou são iguais aos valores. Você não tem que colocar o endereço lá nem nada. Porque a matriz de valores é um ponteiro. Isso é o que você precisa conduzir em sua cabeça, todas essas matrizes são ponteiros por baixo do capô. Portanto, se você quiser atribuir o primeiro elemento de um array a um ponteiro, tudo o que você precisa fazer é especificar o array no lado direito do operador igual e no lado esquerdo você tem apenas o ponteiro dos valores. Isso vai apontar para o primeiro endereço na matriz ou o primeiro elemento. O operador de endereço não é usado, observe isso. O compilador c trata a aparência de um nome de array sem um subscrito como um ponteiro para o array. Portanto, especificar valores sem um subscrito tem o efeito de produzir um ponteiro para o primeiro elemento de valores. E isso significa que agora você pode apontar para valores subsequentes na matriz apenas incrementando o ponteiro, para ir para o próximo endereço. E é sobre isso que falaremos nas próximas palestras, quando falarmos sobre aritmética de pontos. E é realmente apenas uma coisa de notação e também uma coisa de eficiência. Portanto, uma forma equivalente de produzir um ponteiro para o início dos valores é também aplicar o endereço do operador ao primeiro elemento da direita. Portanto, você pode fazer isso de duas maneiras, qualquer uma delas está bem. Mas você também pode fazer isso. Você poderia dizer o endereço do ponteiro de valores de valor abaixo de zero. Isso definirá o ponteiro de valores para o primeiro elemento na matriz. Portanto, você pode usar este ou apenas dizer valores, ponto igual a valor. Obviamente, sem o e comercial e sem o subscrito, é um pouco menos código ou mais fácil de escrever. Isso pode ser um pouco mais claro porque você não sabe necessariamente que os valores são uma matriz, a menos que observe a declaração. Mas, novamente, qualquer maneira está bem. O ponteiro de valores é igual aos valores ou o ponteiro dos valores é igual ao endereço do valor abaixo de zero. É uma questão de preferência do programador. E, novamente, é uma coisa notacional. Então, apenas para reiterar, quando você tem duas expressões ar sub-i e asterisco ar mais i, elas têm significado equivalente. Então, só queremos ter certeza de que você entende isso. Ambos funcionam se ar for o nome de um array. Você pode usar o ponteiro e pode retirá-lo de referência. E ambos funcionam se for uma variável de ponteiro. Usar uma expressão como ar plus plus só funciona se ar for uma variável de ponteiro. Portanto, você não pode incrementar um array dizendo mais mais e esperar que ele vá para o próximo elemento. Você só pode fazer isso em ponteiros ou ponteiros de array. Portanto, se temos ar que é um ponteiro apontando para o array e queremos ir para o próximo elemento, podemos apenas incrementá-lo todas as vezes. Mas se você disser ar sub-i porque ar sub i é um array e um array é um ponteiro, você pode desreferenciá-lo dizendo ar que é ar é um ponteiro que atribuímos a ar mais i, é a mesma coisa. Portanto, nas próximas palestras, vamos falar sobre aritmética de pontos e isso está fortemente relacionado à relação entre matrizes e ponteiros. Os ponteiros podem ser matrizes. Não é um array de ponteiros, é um elemento. Portanto, você pode usar o endereço de um ponteiro para navegar por uma matriz, iterar por uma matriz. Obrigada.