Реферат Курсовая Конспект
Над указателями можно выполнять следующие операции - раздел Программирование, Указатели Указатель –Это Целая Беззнаковая Переменн...
|
Указатели
Указатель –это целая беззнаковая переменная, содержащая адрес памяти какого-либо объекта программы.Указатель может содержать адрес переменной, массива, структуры, другого указателя, функции.
Указатель может принимать следующие значения:
· адрес ранее определенной переменной, который можно получить с помощью операции &;
· указатель, уже имеющий значение;
· явно заданный адрес памяти с преобразованием типа.
Для обращения (доступа) к объекту, адрес которого содержит указатель, используется операция разыменования *.
Над указателями можно выполнять следующие операции:
· взятие адреса & &ptra;
· определение размера указателя sizeof(ptra);
· разыменование * *ptra;
· преобразование типов (char*)ptra;
· присваивание ptra=&a;
· сложение и вычитание целых чисел ptra+=3; ptra–=2;
· инкремент, декремент ptra++; ptra–-;
· вычитание указателей int n=ptra-ptrb;
· операции отношения == != > >= < <= ptra>ptrb;.
Пример 1. Примеры инициализации указателей
#include <stdio.h>
void main()
{int a=10;
printf("a=%d &a=%p n",a,&a);
Int *ptra=&a; //указатель проиниц. адресом переменной типа а
printf("ptra=%p &ptra=%pn",ptra,&ptra);
Int *ptrb=ptra; //указатель проиниц. значением указателя ptra
printf("ptrb=%p &ptrb=%pn", ptrb,&ptrb);}
int*ptrc=(int*)0xB8000000;//указатель проиниц. явным адресом
printf("ptrc=%p &ptrc=%p",ptrc,&ptrc);
}
Результат: a=___ &a=_________________
Ptra=___________ &ptra=___________
Ptrb=___________ &ptrb=___________
Ptrc=___________ &ptrc=___________
Расположение в памяти переменных представлено на рис.
Адрес | Содержимое | |
начало сегмента | 8ADA:0000 | |
. . . | ||
8ADA:FFF2 | ||
8ADA:FFF3 | ||
8ADA:FFF4 | ||
8ADA:FFF5 | ||
8ADA:FFF6 | ||
8ADA:FFF7 | ||
8ADA:FFF8 | ||
8ADA:FFF9 | ||
a | 8ADA:FFFA | |
8ADA:FFFB | ||
8ADA:FFFC | ||
8ADA:0FFD | ||
адрес a | 8ADA:FFFE | |
8ADA:FFFF |
Пример 2. Использование операции разыменования указателей
#include <iostream.h>
void main()
{float f=1.3;
float *pf=&f;
cout<<"pf="<<pf<<" *pf="<<*pf<<endl;
*pf=2.7;
cout<<" f="<<f<<endl;
int a=5;
int *pa=&a;
cout<<"pa="<<pa<<”*pa=”<<*pa<<endl;
}
Результат: pf=0xF9B0 0FFC *pf=_____
F=_____
Pa=0xF9B0 0FFA *pa=______
Пример 3. Использование вычитания указателей типа int
#include <stdio.h>
void main()
{int a=1,b=7,c;
int*pa=&a, *pb=&b, *pc=&c;
printf("pa=%p pb=%p pc=%pn",pa,pb,pc);
printf("pa-pb=%dn",pa-pb);
printf("pa-pc=%dn",pa-pc);
}
Результат: pa=8B04:FFFE pb=8B04:FFFC bc=8B04:FFFA
_______ ___ __
_______ ___ __
_______ ___ __
Пример 6. Использование операции многократного разыменования указателя
#include <iostream.h>
void main()
{int i=5;
int *pi=&i;
int **ppi=π
int ***pppi=&ppi;
Cout<<" &i="<<&i<<endl; // &i=0x8f86 010с
Cout<<" &pi="<<&pi<<endl; // &pi=0x8f86 0108
Cout<<" &ppi="<<&ppi<<endl; // &ppi=0x8f86 0104
Cout<<" &pppi="<<&pppi<<endl;// &pppi=0x8f86 0100
Cout<<" pppi="<<pppi<<endl; // pppi=_____________
Cout<<" *pppi="<<pppi<<endl; // *pppi=____________
Cout<<" **pppi="<<pppi<<endl; // **pppi=____________
Cout<<"***pppi="<<pppi<<endl; // ***pppi=___
}
Адрес | Содержимое | |
адрес указателяpppi | 8F86:0100 | |
адрес указателяppi | 8F86:0104 | |
адрес указателяpi | 8F86:0108 | |
адрес переменнойi | 8F86:010c |
Пример 7. Использование операций разыменования, инкремента, декремента и взятия адреса
#include <stdio.h>
void main()
{int a=1,b=2,c=5;
int *ptr=&b;
Printf("&c=%pn",&c); // &c=8ff0:0050
Printf("&b=%pn",&b); // &b=8ff0:0052 //ptr=&b
Printf("&a=%pn",&a); // &a=8ff0:0054
Printf("*&b=%dn",*&b); // *&b=__
Printf("*&++b=%dn",*&++b); // *&++b=__
Printf("*ptr=%dn",*ptr); // *ptr=__
Printf("*ptr++=%dn",*ptr++); // *ptr++=__
printf("*ptr=%dn”,*ptr); // *ptr=__ (*)
Printf("++*ptr=%dn”,++*ptr); // ++*ptr=__
Int m=10,n=20; // &n=8ff0:0060 &m=8ff0:0062
int *pm=&m;
Имя массива– этоуказатель-константа,значением которого служит адрес нулевого элемента массива.
Пример 11.
#include <stdio.h>
void main()
{int m[]={1,2,3,4},i;
Printf("*m=%d *(m+1)=%dn",*m,*(m+1));// ___________
char str[]="BORLAND C++";
for(i=8;i<11;i++)
Printf("%c",*(str+i)); //________
}
Пример 12
#include <stdio.h>
void main()
{const n=5; float farr[n];
for(int i=0;i<n;i++)
{scanf("%f",&farr[i]);
*(farr+i)=*(farr+i)**(farr+i);
printf("%.3fn",i[farr]);
}
Пример 13.
#include <stdio.h>
void main()
{char st[]="СОНET";
char *pst=&st[2];
Printf("%c%c%cn",pc[0],pc[-1],pc[-2]); // _______
Printf("%c",*pc); // __
Printf("%c",*++pc); // __
Printf("%c",*++pc);} // __
– Конец работы –
Используемые теги: над, указателями, можно, выполнять, следующие, операции0.099
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Над указателями можно выполнять следующие операции
Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов