Ярлыки

_GetPixelIndex (1) _SetPixelIndex (1) 3-phase (1) 800x480 (1) АЦП (1) генератор (1) синхронный усилитель (2) структура (1) учебный курс (1) шаговый двигатель (1) ШИМ (2) accert (1) AD7608 (1) AD8429 (1) ADC (5) amplifer (1) arccos (1) arcsin (1) arctang (2) arctg (3) ARM (2) arm_sqrt_q15 (2) assembler (6) ASSERT (1) atan (2) bit (1) Bitband (1) boot (3) bootlloader (1) BUTTON (1) C (5) C# (1) CAN (2) CC2530 (5) CMSIS (4) command (1) Cordic (1) Core746I (1) CubeMX (4) DBGMCU (2) debug (2) debug.ini (1) delegate (1) Digital Potentiometers (1) DigitalPOT (1) Discovery (1) DMA (9) DMA2D (1) DSP (1) DSP library (1) DWT (1) EFM32 (5) EmWin (9) EXTI (1) FATFS (1) FMC (2) FreeRTOS (2) gl868-dual cmux (1) GPIO (4) GUI (2) GUIBuilder (1) GUIDRV_CompactColor_16 (1) HAL (3) HappyGecko (1) Hard Fault (2) heap (1) I2C (1) ID (1) ILI9320 (1) ILI9325 (1) Initialisation (1) InitLTDC (1) Instrumentithion (1) Interrupt (4) ITR (1) JTAG (1) Keil (5) LCDConf (2) lock-in (1) LTCD (1) LTDC (3) main (1) memory (1) MINI_STM32 Revision 01 (1) nBoot0 (1) NVIC (1) OnePulse (2) OSAL (4) pack (1) phase (1) printf (3) Pulse (1) PWM (12) RCC (2) RCR (1) Register (1) RESET (2) RS232 (3) RSS (1) RTC (3) RTOS-RTX (1) RTT (1) RTX-RTOS (1) SDCard (1) SDRAM (6) Segger (2) SPI (3) sqrt (3) SSD1298 (1) SSD1963 (1) Standart Peripherial Library (3) STANDBAY (1) startup (1) STemWin (8) stepper motor (1) STlink (2) STM32 (17) STM32429ZI (1) STM32Cube (1) STM32DBG.IN (1) STM32F (28) STM32F0 (4) STM32F1 (13) STM32F4 (10) STM32F4 Discovery (1) STM32F407ZG (1) STM32F429 (2) STM32F746 (1) STOP (1) string (1) struct (1) SWD (1) SWD JTAG (1) Synhronization (1) system_stm32f4xx.c (1) SystemInit (1) SysTick (1) task (4) telit (1) TIM (27) typedef (1) UART (1) USART (9) viewer (2) WM_PAINT (1) Z-stack (5) ZigBee (5)

воскресенье, 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;
}

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

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