Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Здесь кроется засада: в 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-вызов функции должен находиться в левой части присваивания

25) Динамическое распределение памяти

ОС позволяет программе захватывать свободные блоки. Стартовый код создает списки свободных и занятых блоков в куче (В каждой записе о блоке хранится адрес его начала и размер в байтах) Для динамического распр. памяти в стандартной библ.. 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;
string++; } }

void main(void)

{ show_string("Учимся программировать на языке C++!"); }

Определения количества символов в строке:

#include <iostream.h>

int string_length(char *string)

{ if (string==Null) return -1;

int length = 0;
while (*string!= '\0')++

{ length++;
string++; }
return(length); }

void main(void)

{ char title[] = "Учимся программировать на языке C++";
cout << title << " содержит " << string_length(title) << " символов"; }

Сравнение строк:

Функция strcmp

#include ‘string.h’
int strcmp(const char *str1, const char *str2);

Функция strcmp() сравнивает в лексикографическом порядке две строки и возвращает целое значение, зависящее следующим образом от результата сравнения.
Значение Результат сравнения строк
Меньше нуля str1 меньше str2
Нуль str1 равен str2
Больше нуля str1 больше str2
Пример

 

int strcmp(const char *cs, const char *ct)

{

signed char __res;

while (1) {

if ((__res = *cs - *ct++)!= 0 ||!*cs++)

break;

}

return __res;

}

 

Конкатенация строк

Код C+
  char *strcpy(char *dest, const char *src);
 

Функция копирует содержимое строки src в строку dest, поверх его содержимого и возращает полученную в результате строку dest.

 

Код C
  char *strcat(char *dest, const char *src);
 

Функция присоединяет содержимое строки src в конец строки dest и возращает результат присоединения.

strncat()
в отличие от strncpy() она всегда присоединяет нуль-символ к результату, в то время как strncpy() не присоединяет, если не доходит до него в копируемой строке, из-за чего его п***риходится ставить вручную

Или

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...