PONTEIROS E ARRAYS

Ponteiros

#include <stdio.h>
int main() 
{
   float x, s;
   float *p;

   p = &x;    /* copia em p o endereço de x */

   *p = 10;          /* x = 10 */
   printf("Valor de x: %f\n", x);
   s = *p;           /* s = x; */

   scanf("%f",p);    /* scanf("%f",&x)  */
   s += *p;          /* s += x; */
   printf("Valor de s: %f\n", s);

   return(0);
}

Ex

p

x

Ex

Es

s

		

Erros de atribuição:   
	int i, j, *pi;
	float x, y, *pf, *qf;

	pf = &i;   pi = &x;   pi = pf;   /* erros */
	x = *pi;   j = *pf;     /* erros */

Vetores

Declaração:	int ai[10];
		float af[10];

Acesso: 	af[0], af[1], ..., af[9].

Cuidado: C não verifica índices. 

#include <stdio.h>
main()
{
   float af[10];
   float s, *pf;
   int i;

   s = 0;
   pf = af;  /* pf = &af[0] ou pf = (af+0)  */

   for (i=0; i<10; i++){
      printf("\nDigite o numero:");
      scanf("%f", pf+i);     /* scanf("%f",&af[i]) */
      s += pf[i];      /* s += *(pf+i)  ou af[i] */
   }
   printf("\nsoma = %f\n", s);

}

af[0]

af[1]

af[2]

af[3]

sizeof(float)

. . .

af[9]

af+0

af+1

af+2

af+3

af+9

Observações:	af+i == &af[i] == df+i == &df[i] 
			af[i] == *(af+i) == df[i] == *(df+i)
			*df+i  != *(df+i)  

Operadores:		pf++; pf += i; pf--; pf-=i; i = pf1-pf2;
			<, >, <=, ==, !=, etc. Ex: pf1 < pf2
	
Matrizes bidimensionais (ou N-dimensionais)

#include <stdio.h>
int main ()
{
   int Mi[4][5];
   int i,j,count;

   count=1;
   for (i=0;i<4;i++)
      for (j=0;j<5;j++){
         Mi[i][j]=count;
         count++;
         printf("\nLinha:%d Col:%d INT:%d",i,j,Mi[i][j]); 
      }
   return(0);
}

Mi[0]+4

Mi[0][4]

. . .

Mi[1]+1

Mi[1][1]

Mi[1]

Mi[1]+0

Mi[1][0]

. . .

Mi[0]+1

Mi[0]+0

Mi[0]

Mi[0][1]

Mi[0][0]

Observação:		Mi[i][j] == *(Mi[i]+j) == *(*(Mi+i)+j)

Strings

	char str1[100];

Toda string deve terminar com o caracter '\0'. 

Funções:	gets, strcpy, strcat, strlen, strcmp

Inicialização de arrays

float vect [6] = { 1.3, 4.5, 2.7, 4.1, 0.0, 100.1 };

float vect [] = { 1.3, 4.5, 2.7, 4.1, 0.0, 100.1 };

int matx [3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

int ident2[][] = {{1,0}, {0,1}};

char str [10] = { 'J', 'o', 'a', 'o', '\0' };

char str [10] = "Joao";

char str_vect [3][10] = { "Joao", "Maria", "Jose" };

char mess [] = "Linguagem C: flexibilidade e poder.";

int matrx [][2] = { 1,2,2,4,3,6,4,8,5,10 };