Унарные операции изменения значения указателя

Тема № 4. Организация данных. Массивы и указатели

int Array[10]; // Массив из десяти целых чисел

double D_array[1000]; // Массив из 1000 действ-х чисел

char Buffer[80]; // Массив из 80 байтов

int Arr[3];

Arr[0], Arr[1], Arr[2]

//*************** Middle project

#include <stdio.h>

#include <conio.h>

Int main()

{

int Arr[10];

Int i, m;

for (i = 0; i < 10; i++) {

scanf("%d", &Arr[i]);

}

m = 0;

for (i = 0; i < 10; i++) {

m += Arr[i];

}

printf("Result = %10.5lf", (double)m /10.0);

Getch();

Return 0;

}

int matrix[10][20]; // Определение матрицы 10´20

double points[50][50][50]; // Координаты точек

//** Подсчет суммы элементов матрицы

#include <stdio.h>

#include <conio.h>

Void main()

{

Int i,j;

int matrix[3][4];

double sum = 0;

for (i = 0; I < 3; i++) // Input elements

for (j = 0; j < 4; j++)

scanf("%d", &matrix[i][j]);

for (I = 0; I < 3; i++) // Calculation

for (j = 0; j < 4; j++)

sum +=(double)matrix[i][j];

printf("Sum = %10.0lf", sum); //Output result

Getch();

}

int matr [2][3];

matr[0][0] : matr[0][1] : matr[0][2] : matr[1][0] : matr[1][1] : matr[1][2]

Инициализация массивов

 

double seq [] = {1.0, 2.1, 3.2, 4.3, 5.0};

seq[0]=1.0 seq[1]=2.1 seq[2]=3.2 seq[3]=4.3 seq[4]=5.0

int seq[4] = {1, 2};

определены только seq[0] = 1 и seq[1] = 2

элементы seq[2] и seq[3]останутся неопределенными.

int matr[3][2] = {{2,3}, {4,5}, {6,7}};

matr[0][0]=2 matr[0][1]=3 matr[1][0]=4 matr[1][1]=5 matr[2][0]=6 matr[2][1]=7

int matr[3][2] = {2, 3, 4, 5, 6, 7};

double M[4][6] = {{1.0}, {2.2}, {44.2}, {8.0} };

- начальные значения получат элементы только первого столбца матрицы M.

char str [6] = {‘h’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’};

То же самое можно записать как

char <имя_массива> [размер] = “строка”;

char str [6] = “hello”;


Указатели

 
 
 


Адреса Содержимое  
0x0012ff50 ‘A’ Переменная Symbol
0x0012ff51 ‘B’  
0x0012ff52 ‘C’  

double *pVal, Value;

int *pNum0, *pNum1;

long *plVal;

char *pNum0,

z1, z2, z3, *pVal,

Mas[4] = {'A', 'B', 'C'};

pNum0 = NULL;

pNum0 = &Mas[0];

z1 = *pNum0;

pVal = &(*pNum0);

z2 = *(++pNum0);

pNum0 += 1;

z2 = *pNum0;

if (pNum0 == pVal)

x = *pNum0++;

z1 = *pNum0;

int x=100, y = 99, *pNum0; // pNum0 - указатель

pNum0 = &x; // pNum0 = 0x0012fec3 - адрес в памяти

y = *pNum0; // y = 100 - поменяло значение

(для void *pAdr объект по адресу pAdr не определен).

double *pVal, Value;

. . .

pVal = &Value;

int *pNum;

Float Number;

Number = 10.5;

pNum = &Number; ошибка!

double *pVal, Value;

. . .

pVal = NULL; // pVal = 0x00000000

 

1 – присваивание // pNum0 = &Mas[0]

2-получение значения объекта, на кот.ссылается указатель//z1=*pNum0;

3 - получение адреса самого указателя // &pNum;

4-унарные операции изменения значения указателя/pNum0;pNum0++;

5 - аддитивные операции // pNum0 += 1;

6 - операции сравнения // if (pNum0 == pVal)

 

Присваивание

int *pDat, *pDO, Date = 2003, DateOld=1997;

pDat = &Date; pDO = &DateOld; //Адрес переменной

pDat = pDO; // Указатель

pDO = NULL; // Спец. значение

Как и для обычных переменных допустимо «приведение типа»:

int *pI;

char *pC;

. . .

pC = (char *)pI; // Преобразование указателей

Получение значения того объекта, на который ссылается указатель

Получение адреса самого указателя

 

char c_Sym = ‘B’;

char *p_Sym;

*p_Sym – объект,

Указатель адресуемый

P_Sym указателем p_Sym

Значение указателя
Значение объекта
Адрес объекта Адрес объекта

&p_Sym

 

*p_Sym - объект, находящийся по адресу p_Sym

*p_Sym – объект,

Указатель адресуемый

p_Sym = &c_Sym указателем p_Sym

0x0012ff50
B
Адрес объекта Адрес объекта

&p_Sym

X0012ff6с 0x0012ff50

char **t; // переменная t - указатель на указатель символа

 

унарные операции изменения значения указателя

sizeof(<тип данных>)

Для char – 1, для short – 2, для long – 4 и т.д.

 

char : байт байт байт байт байт

short: байт байт байт байт байт

float: байт байт байт байт байт

 

int x[4],*p, n;

p = &x[0]; // p равно адресу 1-го эл-та массива x- &x[0]

n = *p++; // p равно а0x0064fdc8

n = *p++; // p равно а0x0064fdcc

n = *p++; // p равно а0x0064fdd0

 

Аддитивные операции

sizeof(<тип данных>)