Skip to content

Instantly share code, notes, and snippets.

@mAlishera
Created April 12, 2017 07:45
Show Gist options
  • Save mAlishera/0eb499c066754a4681331e7cd345fa83 to your computer and use it in GitHub Desktop.
Save mAlishera/0eb499c066754a4681331e7cd345fa83 to your computer and use it in GitHub Desktop.
лекция
#include <stdlib.h>
#include <math.h>
#include <curses.h>
#include <cmath>
int main(int argc, const char * argv[])
{
// заполняем двумерный массив рандомными значениями
const int R = 15;
const int C = 12;
const int N = 50;
int a[R][C];
int i,j;
srand((unsigned) time(0));
for(i=0; i<R; i++)
for(j=0; j<C; j++)
a[i][j]=rand()%N;
for(i=0; i<R; i++) {
printf("\n\t");
for(j=0; j<C; j++)
printf("%4d", a[i][j]);
}
// Пример - создаем двумерный массив и в одномерный массив считаем суммы по строкам двумерного
const int R = 15;
const int C = 12;
const int N = 50;
int a[R][C];
int S[R];
int i, j;
srand((unsigned) time(0));
for(i=0; i<R; i++)
for(j=0; j<C; j++)
a[i][j]=rand()%N;
for(i=0; i<R; i++)
for(S[i]=j=0; j<C; S[i]+=a[i][j])
// считаем сумму ...
for(i=0; i<R; i++) {
printf("\n\t%6d - ", S[i]);
for(j=0; j<C; j++)
printf("\4d", a[i][j]);
}
// квадратная матрица
// главная диагональ - i=j
// под главной диагональю i>j, над главной диагональню i<j
// побочная диагональ - i+j=n (матрица из k элементов, от 0 до n=k-1)
// под побочной диагональю - i+j>n
// над побочной диагональю - j+j<n
// Тема - указатели
// &
// * - косвенная адресация - раз-именования(разыменования) - возвращает значение, на кот указывает операнд
// y = ? по адресу 1000 (у у нет значения, она не проинициализирована)
// x = 5 по адресу 2000
x = &y;
// x = 1000
// все указатели разделяются на типизированные и нетипизированные(void)
// Объявление указателей
char *pc;
int *pk, *pi;
void *pv;
char *pc = (char*) 0xB8000000;
void *pv = NULL;
char c='S';
int k(10), i(20);
float f=3.14F;
// указатели
char *pc = &c;
int *pk(&k), *pi(&i);
float *pf = &f;
const int N = 20;
int i(0);
// указатель-переменная на переменную - все может меняться
int *pi(&i);
// указатель-переменная на константу - указатель может меняться, а объект, на который он указывает - нет (указывает на любые константы)
const int *pN = &N;
// указатель-константа на переменную
int *const cp=&i;
// указатель-константа на константу
const int *const cpN = &N;
// получать блоки памяти
malloc, calloc
// обратно вернуть -
free
// получить
new
// вернуть
delete
// звездочка может стоять где угодно
// функция пытается выделить блок памяти, и если он находится, она его выделяет и возвращает указатель на блок памяти или NULL
void* malloc(size_t s);
// возвращает нетипизированный указатель - n количество элементов, s размер каждого элемента и проинициализирует все элементы нулями
void *calloc(size_t n, size_t s);
// освободить
void free(void * block)
// Пример
double* pd (NULL);
int * pi=NULL;
pd = (double*) malloc(10*sizeof(double));
pi = (int*) calloc(20, sizeof(int));
free((void*) pd); free((void*) pi);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment