Страницы

Страницы

воскресенье, 21 декабря 2014 г.

Указатели в Си

В переменной p содержится адрес, по которому хранится переменная с:
p = &c
В переменной a, то что находится по адресу в переменной p(a == c):
a = *p
int c;
int* p;
int a;
int arr[10];

p = &c;
a = *p;
p = p + 1;
a = *p; // следующая переменная в памяти типа int
В массиве:
a = arr; // то же самое что и сл. строчка
p = &arr[0]; // то есть arr без скобок это уже указатель на первый элемент массива
Что бы взять указатель на переменную другого типа, используют такую конструкцию:
float x;
char* p;

p=(char*) &x;
// тогда p указатель на перменную типа char. float - больше, состоит из нескольких char.

Выделение и освобождение памяти

#define SomeType double
void main()
{
    unsigned int ArraySize;
    scanf("%u",&ArraySize);
    SomeType *t=(SomeType*)malloc(sizeof(SomeType)*ArraySize);
    /*
        do something
    */
    free(t);
}


Функция принимающая указатель:
Вызываем функцию -> Передаем пар-ры -> Передаем адрес (&x)
Описываем функцию -> Пишем, что принимает указатель(*p для компилятора)
main()
{
    uint8_t x = 0;
    test(&x);
}

test(uint8_t *p)
{
    p++;
    *p = 2;
}

Комментариев нет:

Отправить комментарий