Калуга, 2013

Отчёт

по лабораторным работам по курсу

Языки программирования С/С++

Лабораторная работа №1

«Указатели, массивы, функции.»

Выполнил студент: Филиппов Дмитрий

Группа: УТС.Б-31

Проверил: Адкин М.Ю.

Калуга, 2013

1. Кратко ответьте на следующие вопросы:

1. Что такое указатель? Как он объявляется в программе С?

2. Может ли указатель определяться в строке объявления?

3. Чем определяется тип указателя? Размер в байтах его внутреннего

представления?

4. Как можно использовать указатель с типом void?

5. Приведите пример разыменования указателя.

6. Приведите примеры настройки указателя на объекты различных типов.

7. Как указатель может быть настроен на функцию С?

8. Дайте определение массива С.

9. Чем является имя массива без последующих квадратных скобок?

10.Какой индекс у первого элемента массива?

11.Как можно получить доступ к элементам массива? Рассмотрите не-

сколько вариантов.

12.Какие виды массивов существуют в С?

13.Как можно определить многомерный массив?

14.Допускают ли массивы С инициализацию?

15. Дайте определение функции С.

16.Дайте определение формальных и фактических аргументов функции.

17.Чем отличаются объявление функции от ее определения?

18.В каком месте программы функция может объявляться?

Определяться?

19.Что такое прототип функции? Для чего он используется?

20. Какой тип по умолчанию возвращает функция С?

21. Какова область видимости объектов объявленных внутри блока

функции? К какому классу памяти они относятся?

22.Может ли функция С возвращать в точку вызова более одного значения?

23. Могут ли быть фактическими аргументами функции С другие функции? Массивы? Как решается данная проблема?

24. Какой прием следует применять для получения из функции С аналога

процедуры языка ПАСКАЛЬ? Как представляются параметры-

значения и параметры-переменные такой процедуры?

1. Что такое указатель? Как он объявляется в программе С?

Указатель - это переменная, которая содержит начальный адрес, по которому может находиться любой объект программы С – переменная, массив статический или динамический, строка символов, функция, структура, объединение. При объявлении переменной типа указатель, требуется определить тип объекта, адрес которого будет содержать указатель.


2. Может ли указатель определяться в строке объявления?

Да, примером может служить: int i = 0, *j=&i;

3. Чем определяется тип указателя? Размер в байтах его внутреннего

представления?

Тип указателя может определяться однозначно спецификатором типа, а может определяться типом данных, на который указатель настроен. Размер в байтах его внутреннего представления определяется типом указателя.

4. Как можно использовать указатель с типом void?

Указатель с типом void может использоваться, как универсальный указатель на любой тип данных.

5. Приведите пример разыменования указателя.

Int i=0,k;

Int *j=&i;

k=*j;

7. Как указатель может быть настроен на функцию С?

int (*p_ArraySumma)(int Array[], int size);

typedef int (*T_function)(int size,int count);

T_function F1

8. Дайте определение массива С.

Массив С - это группа элементов одного типа, имеющих одно имя, доступ к которым выполняется либо с помощью индексации, либо с помощью арифметики указателей.

9. Чем является имя массива без последующих квадратных скобок?

Идентификатор массива без квадратных скобок является начальным

адресом элементов массива, и совпадает с адресом первого элемента.

10.Какой индекс у первого элемента массива?

В С индексация элементов массива начинается с [0]


11.Как можно получить доступ к элементам массива? Рассмотрите несколько вариантов.

а) С помощью индексации

#include <stdio.h>

int main()

{

int A[2][2][2]={{{1,2},{3,4}},{{5,6},{7,8}}};

int i=0,j=0,k=0;

for(i=0;i<2;i++)

{

for(j=0; j<2; j++)

{

for(k=0; k<2; k++)

{

printf("A[%d][%d][%d] = %d ",i,j,k,A[i][j][k]);

}

printf("\n");

}

}

return 0;

}

б) С помощью арифметики указателей

#include <stdio.h>

int main(){

int A[3][3]={{10,20,30},{40,50,60},{70,80,90}};

int *pA=A[0];

//int *pA=&A[0][0];

for(int i=0; i<3;i++)

{for(int j=0;j<3;j++)

{

printf(" A[%d][%d] = %d ",i,j,*pA++);

}

printf("\n");

}

return 0;

}#include <stdio.h>

int main()

{int A[3][3]={{10,20,30},{40,50,60},{70,80,90}};

int *pA=A[0];

//int *pA=&A[0][0];

for(int i=0; i<3;i++)

{

for(int j=0;j<3;j++)

{

printf(" A[%d][%d] = %d ",i,j,*pA++);

}

printf("\n");

}

return 0;

}

12.Какие виды массивов существуют в С?

В языке С определены только одномерные массивы.

13.Как можно определить многомерный массив?

Многомерные массивы объявляются в программе С последовательностью константных выражений размеров, следующих за идентификатором массива, заключенных в свои квадратные скобки.

14.Допускают ли массивы С инициализацию?

Да. int B[]={1,2,3,4,5};

15. Дайте определение функции С.

Функция С – блок операторов языка С, результат выполнения последовательности которых возвращает некое значение в точку вызова.

16.Дайте определение формальных и фактических аргументов функции.

Формальными аргументами функции С является последовательность аргументов, разделенных запятыми, описанные в заголовке функции и в месте её определения.

Фактическими аргументами функции С является набор аргументов, использующихся при вызове функции С.

17.Чем отличаются объявление функции от ее определения?

Объявлением функции является её заголовок. Объявление завершается символом «;» и не содержит код функции, в отличии от определения функции.

18.В каком месте программы функция может объявляться? Определяться?

Функции С могут объявляться в любом месте программы. А определяться могут лишь после объявления.

19.Что такое прототип функции? Для чего он используется?

Прототипом функции является заголовок функции, оканчивающийся точкой с запятой. Используется для объявления функции

20. Какой тип по умолчанию возвращает функция С?

Целый тип

21. Какова область видимости объектов объявленных внутри блока функции? К какому классу памяти они относятся?

Видимость объектов, объявленных внутри блока функции – блок функции. Класс памяти таких объектов – external

22.Может ли функция С возвращать в точку вызова более одного значения?

Нет. Но функция С может возвращать в точку вызова указатель на любой объект.

23. Могут ли быть фактическими аргументами функции С другие функции? Массивы? Как решается данная проблема?

Нет. Данная проблема решается с помощью передачи таких параметров по адресу с использование указателей.

24. Какой прием следует применять для получения из функции С аналога процедуры языка ПАСКАЛЬ? Как представляются параметры-значения и параметры-переменные такой процедуры?

Для таких целей следует использовать функции вида

Void func(int &a,int &b){

}

Параметры значения следует передавать по соответствующему адресу в памяти. В этом случае копия параметров не создаётся.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: