************************************************************ 26-10-2004 ************************************************************ OPERAÇÕES ARITMÉTICAS COM PONTEIROS Somar n números inteiros, significa fazer com que o ponteiro pase a apontar para n dados do tipo base do ponteiro, a seguir na memória. Ou seja, ao endereço armazenado no ponteiro somamos n*números de bytes do tipo base A ideia para subtração é a mesma. Varrendo um vetor usando ponteiro. Em C++ o relacionamento entre ponteiro e vetor é tão estreito que eles deveriam ser tratados juntos O compilador transforma vetor em ponteiros na compilação, pois o computador compreende ponteiros e não vetores. Qualquer operação que possa ser feita com os indices do vetor pode ser feita com ponteiros. O nome do vetor é um ponteiro constante, que aponta para o primeiro elemento do vetor Exemplo: #include #include void main() { double v[5]={3.4,9.7,8.3,6.5,1.3}; int i; for(i=0;i<5;i++) cout << *(v+i) << " "; getch(); } Varrendo uma matriz usando ponteiro. Uma matriz alocadaestáticamente é armazenada de forma sequencial e contínua na memória. M[i] é o endereço do primeiro elemento do vetor linha i da matriz M Exemplo: #include void main() { int M[3][4]={{10,20,30,40},{50,60,70,80},{90,100,110,120}}; int i,j,*p; p=M[0]; for(i=0;i<3*4;i++) { cout << *p << " "; p++; } for(i=0;i<3;i++) { p=M[i]; for(j=0;j<4;j++) { cout << *p << " "; p++; } cout << "\n"; } cin.get(); } PONTEIRO PARA PONTEIRO uM PONTEIRO PARA PONTEIRO é uma forma de desreferenciamento multiplo ou seja, o ponteiro para ponteiro armazrna o endereço de outro ponteiro, que por sua vez, armazena o endereço de um dado na memória o desreferenciamento multiplo pode ser levado até o nível que se desejar. Em C++ void main() { int x, *p; x=10; p=&x; f(p); cout << x << " " << p; } void f(int &*q) { *q=20; q=NULL; } Em C void main() { int x, *p; x=10; p=&x; f(&p); printf("%d %d ", x, p); } void f(int **q) { **q=20; *q=NULL; }