Enviado em 31/03/2013 - 15:53h
Estou com algumas duvidas sobre ponteiros, segue o codigo:
teste_forum.c: In function ‘main’:
teste_forum.c:17: warning: assignment from incompatible pointer type
teste_forum.c:35: warning: initialization from incompatible pointer type
teste_forum.c:35: warning: excess elements in scalar initializer
teste_forum.c:35: warning: (near initialization for ‘palavras’)
teste_forum.c:35: warning: excess elements in scalar initializer
teste_forum.c:35: warning: (near initialization for ‘palavras’)
teste_forum.c:35: warning: excess elements in scalar initializer
teste_forum.c:35: warning: (near initialization for ‘palavras’)
Executando:
Valor de a[0][0] eh 1
Valor de a[0][1] eh 2
Valor de a[0][2] eh 3
Valor de a[1][0] eh 4
Valor de a[1][1] eh 5
Valor de a[1][2] eh 6
O nome é: Cachorro
O nome é: orro
O nome é:
O nome é: ome é: %s
O nome é: é: %s
O nome é: %s
O nome é: ,
O nome é: ,
O nome é:
O nome é:���H
- Compilando no g++:
teste_forum.c: In function ‘int main()’:
teste_forum.c:17: error: cannot convert ‘int*’ to ‘int (*)[3]’ in assignment
teste_forum.c:35: error: scalar object ‘palavras’ requires one element in initializer
Duvidas:
1) Como seria a correta declaração de retorno da função 'aloca' e como seria a correta conversão de tipo (cast) dentro da função 'aloca'? Preciso de uma solução utilizando int (*a)[3] porque é apenas um ponteiro para vetores de 3 posições. Tentei utilizar o cast e o retorno da função como int (*)[3] mas não dá certo também!
2) Na parte de strings porque é impresso um trecho do código?
Muito obrigado e Feliz Páscoa a todos!!!
- Ao compilar com o gcc resulta em:
/* Teste de Ponteiros */
#include<stdio.h>
#include<stdlib.h>
int * aloca(unsigned int quantidade)
{
return (int *)malloc(sizeof(int)*quantidade);
}
int main(void)
{
int (*a)[3]; // Um ponteiro para vetores de 3 posicoes
int n, m;
a = aloca(2*3);//aloca matriz 2x3
a[0][0] = 1;
a[0][1] = 2;
a[0][2] = 3;
a[1][0] = 4;
a[1][1] = 5;
a[1][2] = 6;
printf("Valor de a[0][0] eh %d\n", a[0][0]);
printf("Valor de a[0][1] eh %d\n", a[0][1]);
printf("Valor de a[0][2] eh %d\n", a[0][2]);
printf("Valor de a[1][0] eh %d\n", a[1][0]);
printf("Valor de a[1][1] eh %d\n", a[1][1]);
printf("Valor de a[1][2] eh %d\n", a[1][2]);
/* Teste de Caracteres */
char (*palavras)[4] = {"Cachorro", "Gato" "Peixe", "Coelho", "Lagartixa"};
for(n = 0; n<10; n++)
{
printf("O nome é: %s\n", palavras[n]);
}
return 0;
}
teste_forum.c: In function ‘main’:
teste_forum.c:17: warning: assignment from incompatible pointer type
teste_forum.c:35: warning: initialization from incompatible pointer type
teste_forum.c:35: warning: excess elements in scalar initializer
teste_forum.c:35: warning: (near initialization for ‘palavras’)
teste_forum.c:35: warning: excess elements in scalar initializer
teste_forum.c:35: warning: (near initialization for ‘palavras’)
teste_forum.c:35: warning: excess elements in scalar initializer
teste_forum.c:35: warning: (near initialization for ‘palavras’)
Executando:
Valor de a[0][0] eh 1
Valor de a[0][1] eh 2
Valor de a[0][2] eh 3
Valor de a[1][0] eh 4
Valor de a[1][1] eh 5
Valor de a[1][2] eh 6
O nome é: Cachorro
O nome é: orro
O nome é:
O nome é: ome é: %s
O nome é: é: %s
O nome é: %s
O nome é: ,
O nome é: ,
O nome é:
O nome é:���H
- Compilando no g++:
teste_forum.c: In function ‘int main()’:
teste_forum.c:17: error: cannot convert ‘int*’ to ‘int (*)[3]’ in assignment
teste_forum.c:35: error: scalar object ‘palavras’ requires one element in initializer
Duvidas:
1) Como seria a correta declaração de retorno da função 'aloca' e como seria a correta conversão de tipo (cast) dentro da função 'aloca'? Preciso de uma solução utilizando int (*a)[3] porque é apenas um ponteiro para vetores de 3 posições. Tentei utilizar o cast e o retorno da função como int (*)[3] mas não dá certo também!
2) Na parte de strings porque é impresso um trecho do código?
Muito obrigado e Feliz Páscoa a todos!!!