Created
April 12, 2017 07:45
-
-
Save mAlishera/0eb499c066754a4681331e7cd345fa83 to your computer and use it in GitHub Desktop.
лекция
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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