Так
0x2c4b1
Память:
Адрес:
0x2c4b2
0x2c4b3
0x2c4b4
0x2c4b5
0x2c4b6
0x2c4b7
Память:
Адрес:
x
y
a
0x2c4b1
0x2c4b2
0x2c4b3
0x2c4b4
0x2c4b5
0x2c4b6
0x2c4b7
int x=10, y;
int *px;
px = &x; /*взять адрес*/
y = *px; /*взять значение по
адресу px, y=10*/
*px = 20; /* <=> x=20 */
int *px; /*указатель*/
px = NULL; /*присвоить NULL*/
int y, *px=NULL, *py=&y, *pz=py; /* инициализация */
int x=10, y=20, *px, *py;
px=&x;
py=px;
int x=10, y=20, *px=&x, *py=&y;
if( px == py ) ...
short x=10, *px=&x; /* инициализация */
short x=10, *px=&x; /* инициализация */
px=px+1;
short x=10, *px=&x; /* инициализация */
px=px+1;
px=px-2;
0
…
10
345
…
x
0x2c4b1
0x2c4b2
0x2c4b3
0x2c4b4
0x2c4b5
0x2c4b6
px
0x2c4b1
…
short x=10, *px=&x; /* инициализация */
px=px+1;
px=px-2;
px++;
0
…
10
345
…
x
0x2c4b1
0x2c4b2
0x2c4b3
0x2c4b4
0x2c4b5
0x2c4b6
px
0x2c4b3
…
short x=10, *px=&x; /* инициализация */
px=px+1;
px=px-2;
px++; *(px+1)+=1;
0
…
10
346
…
x
0x2c4b1
0x2c4b2
0x2c4b3
0x2c4b4
0x2c4b5
0x2c4b6
px
0x2c4b3
…
int i=10, *pi=&i;
double d=3.14, *pd=&d;
void *p;
p=pi; /* Ok */
p=pd; /* Ok */
*p=*p+1; /* Ошибка! */
int a=42, b=42;
int* const ptr=&a;
*ptr=1; /* Ok */
ptr=&b /* Ошибка! */
int a=42, b=42;
const int *ptr=&a;
*ptr=1; /* Ошибка! */
ptr=&b /* Оk */
short a[100];
short *ps;
ps = &a[0];
short a[100];
short *ps;
ps = a;
<=>
short a[100];
for (i=0;i<100;i++)
scanf(“%h”,a+i);
<=>
short a[100];
short *ps;
for (ps=a;ps==a+100;ps++)
scanf(“%h”,ps);
<=>
short a[100];
short *ps=a;
for (i=0;i<100;i++)
scanf(“%h”,&ps[i]);
<=>
Указатель на первый байт массива или NULL, если выделить память не удалось
Требуемое количество байт
Адрес начала освобождаемого фрагмента памяти
Тип параметра функции
float myfun(int a, float b) {
return a+b;
}
...
float (*fptr)(int,float);
fptr = myfun;
...
x=fptr(42,3.14f);
...
Указатель на функцию, воспринимающую параметры типов int и float и возвращающую float
Вызов функции по указателю
Операции пронумерованы
0 – add, 1 – sub, 2 – mul, 3 – div
Массив из указателей
на функции вида
int f(int,int)
Вызов подходящей функции
Для доступа к значению переменной используется операция разадресации
При описании параметров функции используются указатели
При вызове функции как параметр передается адрес переменной
y
t
x = &a; /*в х – адрес a*/
y = &b; /*в y – адрес a*/
t = *x; /*в t поместить значение,
хранящееся по адресу x*/
*X = *y; /*по адресу x записать значение,
хранящееся по адресу y*/
*y = t; /*по адресу y записать значение,
хранящееся в t*/
double **d[8] /* хмм... */
char *(*(**foo [][8])())[] /* упс! что такое foo? */
typedef float real; /* real – синоним float */
typedef unsigned char byte; /* byte – синоним unsigned char */
typedef int *INTPTR; /* INTPTR – синоним int* */
typedef void (*FUNCPTR)(); /* FUNCPTR – указатель на функцию */
/* с прототипом void f() */
real r=0.0; /* то же, что и float r=0.0 */
byte b=0; /* то же, что и unsigned char b=0 */
INTPTR p; /* то же, что и int *p */
FUNCPTR pf; /* то же, что и void (*pf)() */
FUNCPTR paf[10]; /* массив из указателей на функции void (*pf)() */
Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть