Здесь кроется засада: в func2 внутрь функции передается на самом деле не a, а его копия.
Пример,swap void swap (int x; int y) { int tmp=x; x=y; y=tmp; } int main(){ int a=5, b=10; swap (a,b); printf(“a=%d\t b=%d\n”,a,b); … } При вызове функции swap создаются 2 локальные переменные(изменяются лок. переменные). Чтобы ф-ия изменяла внешние переменные переменные должны быть или глобальные,либо должны передавать их адреса. 22)Указатели – это переменная, которая хранит адрес другой переменной или некоторой функции. Указатель не является самостоятельным типом, он всегда связан с каким-либо другим типом. Значение указателя это целое число, множество допустимых значений этого множества адресов. Множество допустимых значений определяется видом указателя 1. нетипизированный 2. типизированный на данные 3. указатель на функцию Случаи, когда нельзя обойтись без указателей 1-Когда нужно работать с конкретным адресом. 2-Когда функция должна изменять передаваемые ей аргументы. 3-Когда нужно вернуть массив то функция может вернуть адрес его 0 элемента 4-вызов функции должен находиться в левой части присваивания
ОС позволяет программе захватывать свободные блоки. Стартовый код создает списки свободных и занятых блоков в куче (В каждой записе о блоке хранится адрес его начала и размер в байтах) Для динамического распр. памяти в стандартной библ.. stdlib.h void malloc(t size); t-unsigned int, ф-я malloc пытается захватить в куче блок размером size, возвращает адресс блока, если неудача то возвр. NULL. new and delete в С++ new — оператор, обеспечивающий выделение динамической памяти в куче. При помощи оператора new[] невозможно напрямую перераспределить уже выделенную память. Для увеличения или уменьшения размера блока памяти нужно выделить новый блок нужного размера, скопировать данные из старой памяти и удалить старый блок.
Оператор delete возвращает память, выделенную оператором new , обратно в кучу. Вызов delete должен происходить для каждого вызова new, дабы избежать утечки памяти. После вызова delete объект, указывающий на этот участок памяти, становится некорректным и не должен больше использоваться.Работа с указателями на примере строк Вывод строки на экран: #include <iostream.h> void show_string(char *string) { while (*string!= '\0') { cout<<*string; void main(void) { show_string("Учимся программировать на языке C++!"); } Определения количества символов в строке: #include <iostream.h> int string_length(char *string) { if (string==Null) return -1; int length = 0; { length++; void main(void) { char title[] = "Учимся программировать на языке C++"; Сравнение строк: Функция strcmp #include ‘string.h’ Функция strcmp() сравнивает в лексикографическом порядке две строки и возвращает целое значение, зависящее следующим образом от результата сравнения.
int strcmp(const char *cs, const char *ct) { signed char __res; while (1) { if ((__res = *cs - *ct++)!= 0 ||!*cs++) break; } return __res; }
Конкатенация строк
Функция копирует содержимое строки src в строку dest, поверх его содержимого и возращает полученную в результате строку dest.
Функция присоединяет содержимое строки src в конец строки dest и возращает результат присоединения. strncat() Или
Воспользуйтесь поиском по сайту: ![]() ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|