Que � ponteiro?
|
Em c, um ponteiro � uma vari�vel que aponte a ou references uma posi��o de mem�ria em que os dados s�o armazenados. No computador, cada pilha de mem�ria tem um endere�o que possa ser usado alcan�ar essa posi��o assim que pontos de uma vari�vel de ponteiro a uma posi��o que de mem�ria n�s podemos alcan�ar e mudamos os �ndices desta posi��o de mem�ria atrav�s do ponteiro.
|
Declara��o do ponteiro:
|
Um ponteiro � uma vari�vel que contenha a posi��o de mem�ria de uma outra vari�vel em dados do shich seja armazenada. Usando o ponteiro, voc� come�a especificando o tipo de dados armazenados na posi��o. O asterisco ajuda dizer ao compilador que voc� est� criando uma vari�vel de ponteiro. Finalmente voc� tem que dar o nome da vari�vel. A sintaxe � como mostrada abaixo.
|
|
O seguinte exemplo ilustra o declataion da vari�vel de ponteiro
|
|
Operador do endere�o:
|
Uma vez que n�s declaramos uma vari�vel de ponteiro ent�o n�s devemos apont�-la a algo que n�s podemos fazer este atribuindo ao ponteiro o endere�o da vari�vel voc� quer apontar como no seguinte exemplo:
|
|
O c�digo acima diz que o endere�o onde num�rico � lojas no ptr vari�vel. O ptr vari�vel tem o valor 21260, se num�rico � armazenado no endere�o da mem�ria 21260 ent�o
|
O seguinte programa ilustra a declara��o do ponteiro
|
/* A program to illustrate pointer declaration*/
main()
{
int *ptr;
int sum;
sum=45;
ptr=&sum
printf ("\n Sum is %d\n", sum);
printf ("\n The sum pointer is %d", ptr);
}
|
|
Express�es do ponteiro & aritm�tica do ponteiro:
|
Nas express�es, como outras vari�veis de ponteiro das vari�veis pode ser usado. Por exemplo se p1 e p2 s�o inicializados corretamente e ponteiros declarados, ent�o as seguintes indica��es s�o v�lidas. |
y=*p1**p2;
sum=sum+*p1;
z= 5* - *p2/p1;
*p2= *p2 + 10;
|
|
C permite que n�s subtraiam inteiros a ou adicionem inteiros dos ponteiros as well as para subtrair um ponteiro do outro. N�s podemos tamb�m usar operadores curtos da m�o com ponteiros p1+=; sum+=*p2; etc., usando operadores relacionais, n�s podemos tamb�m comparar ponteiros como as express�es tais como p1 >p2, p1==p2 e p1! =p2 s�o permitidos.
|
O seguinte programa ilustra a express�o do ponteiro e a aritm�tica do ponteiro
|
/*Program to illustrate the pointer expression and pointer arithmetic*/
#include< stdio.h >
main()
{
int ptr1,ptr2;
int a,b,x,y,z;
a=30;b=6;
ptr1=&a;
ptr2=&b;
x=*ptr1+ *ptr2 6;
y=6*- *ptr1/ *ptr2 +30;
printf("\nAddress of a +%u",ptr1);
printf("\nAddress of b %u",ptr2);
printf("\na=%d, b=%d",a,b);
printf("\nx=%d,y=%d",x,y);
ptr1=ptr1 + 70;
ptr2= ptr2;
printf("\na=%d, b=%d,"a,b);
}
|
|
Ponteiros e fun��o:
|
Em uma declara��o da fun��o, o ponteiro � usado muito muito. �s vezes, somente com um ponteiro uma fun��o complexa pode f�cilmente ser representada e sucesso. Em uma defini��o da fun��o, o uso dos ponteiros pode ser classificado em dois grupos.
- Chamada pela refer�ncia
- Chamada pelo valor.
|
Call by value:
|
N�s vimos que haver� uma liga��o estabelecida entre os par�metros formais e reais quando uma fun��o � invocada. Assim que o armazenamento provis�rio for criado onde o valor de par�metros reais est� armazenado. Os par�metros formais escolhem acima seu valor da �rea de armazenamento o mecanismo de transfer�ncia de dados entre formal e par�metros reais permite o mecanismo dos par�metros reais de transfer�ncia de dados � consultado como a chamada pelo valor. O par�metro formal correspondente representa sempre uma vari�vel local na fun��o chamada. O valor atual do par�metro real correspondente transforma-se o valor inicial do par�metro formal. No corpo do par�metro real, o valor do par�metro formal pode ser mudado. No corpo do subprogram, o valor do par�metro formal pode ser mudado por indica��es da atribui��o ou da entrada. Isto n�o mudar� o valor dos par�metros reais.
|
/* Include< stdio.h >
void main()
{
int x,y;
x=20;
y=30;
printf("\n Value of a and b before function call =%d %d",a,b);
fncn(x,y);
printf("\n Value of a and b after function call =%d %d",a,b);
}
fncn(p,q)
int p,q;
{
p=p+p;
q=q+q;
}
|
|
Call by Reference:
|
O endere�o deve ser ponteiros, quando n�s passamos a endere�o a uma fun��o a recep��o dos par�metros. Usando ponteiros, o processo de chamar uma fun��o para passar o endere�o da vari�vel � sabido como a chamada pela refer�ncia. A fun��o que � chamada pela refer�ncia pode mudar o valor da vari�vel usada na chamada.
|
/* example of call by reference*?
/* Include< stdio.h >
void main()
{
int x,y;
x=20;
y=30;
printf("\n Value of a and b before function call =%d %d",a,b);
fncn(&x,&y);
printf("\n Value of a and b after function call =%d %d",a,b);
}
fncn(p,q)
int p,q;
{
*p=*p+*p;
*q=*q+*q;
}
|
|
Pointer to arrays:
|
uma disposi��o � realmente muito muito similar como o ponteiro. N�s podemos declarar porque o *a interno � um endere�o, porque a [0] o primeiro elemento das disposi��es como a [0] e o *a � tamb�m um endere�o o formul�rio da declara��o � tamb�m equivalente. A diferen�a � ponteiro pode aparecer na esquerda do operador de atribui��o e � a � uma vari�vel que seja lvalue. O nome da disposi��o n�o pode aparecer como o lado esquerdo do operador de atribui��o e � constante.
|
/* A program to display the contents of array using pointer*/
main()
{
int a[100];
int i,j,n;
printf("\nEnter the elements of the array\n");
scanf(%d,&n);
printf("Enter the array elements");
for(I=0;I< n;I++)
scanf(%d,&a[I]);
printf("Array element are");
for(ptr=a,ptr< (a+n);ptr++)
printf("Value of a[%d]=%d stored at address %u",j+=,*ptr,ptr);
}
|
|
Pointers and structures
|
N�s sabemos que o nome de carrinhos de uma disposi��o para o endere�o de seu elemento que do zeroth o mesmo conceito se aplica para nomes das disposi��es de estruturas. Sup�r que o artigo � uma vari�vel de disposi��o do tipo do struct. Considerar a seguinte declara��o:
|
struct products
{
char name[30];
int manufac;
float net;
item[2],*ptr;
|
|
este ptr da indica��o como objetos de uns dados do ponteiro do tipo produtos do struct e declara o artigo como uma disposi��o de dois elementos, cada tipo produtos do struct.
|
Pointers on pointer
|
Um ponteiro contem o valor do lixo at� que esteja inicializado. Desde que os compiladores n�o podem detectar os erros n�o podem ser sabidos at� que n�s executemos o programa recordarmos que mesmo se n�s pudermos encontrar um resultado errado, uninitialized ou inicializou errada ponteiros que n�o possa fornecer nenhuma evid�ncia para n�s aos problemas suspeitos nos ponteiros. Por exemplo as express�es como
|
*ptr++, *p[],(ptr).member
|
|
Keywords:
Pointers in C,
double pointers in c,
pointers in c language,
pointer in c,
pointers in c++,
function pointers in c,
function pointer in c,
using pointers in c,
data types in c,
array of pointers in c,
pointers in c#,
pointer to pointer in c,
pointer to a pointer in c,
pointers to functions in c,
file pointer in c,
file pointers in c
|