100
Да
Да
Нет
Нет
Да
Да
Нет
Да
int M[3][2];
a) A[1][1] A[1][2] A[2][1] A[2][2] A[3][1] A[3][2]
b) A[0][0] A[1][0] A[2][0] A[0][1] A[1][1] A[2][1]
c) A[0][0] A[0][1] A[1][0] A[1][1] A[2][0] A[2][1]
d) A[0][0] A[0][1] A[1][0] A[0][2] A[2][0] A[2][3]
Так
0x2c4b1
Память:
Адрес:
0x2c4b2
0x2c4b3
0x2c4b4
0x2c4b5
0x2c4b6
0x2c4b7
Память:
Адрес:
x
y
a
0x2c4b1
0x2c4b2
0x2c4b3
0x2c4b4
0x2c4b5
0x2c4b6
0x2c4b7
10
127
20031
Память:
Адрес:
x
y
a
0x2c4b1
0x2c4b2
0x2c4b3
0x2c4b4
0x2c4b5
0x2c4b6
0x2c4b7
...
printf(“x=%d, &x=%p”, x, &x);
...
x=10, &x=2c4b1
0x2c4b1
0x2c4b2
0x2c4b8
0x2c4b9
0x2c4ba
0x2c4bb
int x; /*целая переменная*/
int *px; /*указатель*/
px = &x; /*присвоить адрес*/
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
…
short *px=0x2c4b1, *py=0x2c4b5, d;
d = py-px; /* 2 */
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];
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]);
<=>
int a[10];
f(a); /* или */
f(&a[0]);
void f(int *array){
...
}
/*или*/
void f(int array[]){
...
}
Указатель на первый байт массива или 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)
Вызов подходящей функции
#include Для доступа к значению переменной используется операция разадресации При описании параметров функции используются указатели При вызове функции как параметр передается адрес переменной
void swap(int *x, int *y) {
int t;
t = *x; *x = *y; *y = t;
}
void main() {
int a=5, b=10;
swap(&a, &b);
printf(“a=%d, b=%d\n”, a, b);
}
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? */
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: Нажмите что бы посмотреть