É o seguinte, preciso utilizar ponteiros e ponteiros de ponteiros (ex: *p e **p) para construir um programa em C que faça alguma operação com matrizes... pode ser multiplicação, achar determinante, qualquer coisa. Eu escolhi multiplicação mas posso mudar.
Enfim, o objetivo é exercitarmos o uso de ponteiros, mas não sei como vou aplicar estes conceitos na multiplicação de matrizes. Se alguém puder dar uma idéia eu agradeço.
Vlw.
- Home
- >
- Fórum
- >
- Profissional
- >
- Programação, Sc...
- >
- Multiplicação de matrizes...
Eu recomendo começar da maneira mais simples: multiplicação de uma matriz por um escalar. Primeiro, uma matriz unidimensional. Depois, matrizes com dimensões maiores. Isso vai ajudar a fixar o conceito mais importante nesse trabalho, que é o de aritimética de ponteiros. Quando estiver compreendendo bem esse assunto, você parte para a multiplicação entre matrizes, usando a base que já adquiriu sobre a aritimética de ponteiros.
Muito bom. Mas tijolo não revida!
------------------------------------------------
Bom, comecei tentando fazer uma linha apenas.
Segue meu código:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int *p_linha,i;
p_linha = (int *)malloc (sizeof(int)*5);//uma linha simples com 5 colunas
for(i=0;i<5;i++) //preenchendo a linha
scanf("%d", *(p_linha+i));
system("PAUSE"
return 0;
}
O que estou tentando fazer?
Criar um ponteiro que aponte para 5 ints que serão digitados pelo usuário, dentro do for.
Porém, lá pela terceira iteração dá um erro.
Se eu fizer algo do tipo:
*(p_linha+0) = 0;
*(p_linha+1) = 1;
*(p_linha+2) = 2;
*(p_linha+3) = 3;
*(p_linha+4) = 4;
Dá certo. Eu consigo ler todos esses valores posteriormente.
O que estou fazendo de errado no primeiro código?
Obrigado.
"Estou de joelhos vendo o céu desabar...."
Você fez uma pequena confusão. Na sua chamada a scanf, o segundo argumento deve ser um ponteiro (ou uma expressão que possa representar um ponteiro). A função scanf vai usar esse ponteiro como endereço onde ela deve armazenar os dados obtidos. Mas você está usando o operador unário "*" (asterisco) e extraindo o valor armazenado no ponteiro e passando a scanf. scanf interpreta erroneamente esse valor como ponteiro e ai ocorre o problema.
scanf("%d", *(p_linha+i)); /* errado. '*ponteiro' não é um ponteiro. É o valor que está armazenado nesse ponteiro. */
scanf("%d", (p_linha+i)); /* correto. A expressão entre parenteses representa um ponteiro válido */
Já no segundo caso, o uso do operador '*' unário é correto, porque você mesmo está atribuindo o valor. Não ao ponteiro, mas a região da memória onde ele aponta.
Muito bom. Mas tijolo não revida!
------------------------------------------------
Aee pflynn, matou a pau.
Funcionou que é uma beleza. Obrigado cara.
Vou continuar trabalhando no código e posto quando tiver finalizado. Vlw.
"Estou de joelhos vendo o céu desabar...."