Чтение онлайн

ЖАНРЫ

Язык Си - руководство для начинающих

Д. МАРТИН

Шрифт:

}

2. Почему в вопросе 1 массив ref описан до оператора main?

3. Определите значение *ptr и *(ptr + 2) в каждом случае:

а. int *ptr;

static int boop[4] = {12, 21, 121, 212};

ptr = bоор;

б. float *ptr;

static float awk[2][2] = { {1.0, 2.0}, {3.0, 4.0}};

ptr = awk[0];

в. int *ptr;

static int jirb[4] = {10023, 7};

ptr = jirb;

г. int = *ptr;

static int torf[2][2] = {12, 14, 16};

ptr = torf[0];

д. int *ptr;

static int fort[2][2] = { { 12}, {14, 16} };

ptr = fort[0];

4. Предположим, у нас есть описание static int grid[30][100];

а. Выразите адрес grid [22][56] иначе.

б. Выразите адрес grid[22][0] двумя способами.

в. Выразите адрес grid[0][0] тремя способами.

Ответы

1.

D D

O O

L L

Т Т

2. По умолчанию такое положение ref относит его к классу памяти типа extern, a массивы этого класса памяти можно инициализировать.

3.

а. 12 и 121

б. 1.0 и 3.0

в. 10023 и 0 (автоматическая инициализация нулем)

г. 12 и 16

д. 12 и 14 (именно 12 появляется в первой строке из-за скобок).

4.

a. &grid[22][56]

б. &grid[22][01 и grid[22]

УПРАЖНЕНИЕ

1. Модифицируйте нашу метеорологическую программу таким образом, чтобы она выполняла вычисления, используя указатели вместо индексов. (Вы по-прежнему должны объявить и инициализировать массив.)

13. Символьные строки и функции над строками

СИМВОЛЬНЫЕ CTРOKИ

ИНИЦИАЛИЗАЦИЯ СИМВОЛЬНЫХ СТРОК

ВВОД-ВЫВОД СТРОК

ИСПОЛЬЗОВАНИЕ ФУНКЦИЙ, РАБОТАЮЩИХ CO CТРОKAMИ

АРГУМЕНТЫ КОМАНДНЫХ СТРОК

СИМВОЛЬНЫЕ CTРOKИ

Символьные строки представляют один из наиболее полезных и важных типов данных языка Си. Хотя до сих пор все время применялись символьные строки, мы еще не все знаем о них. Конечно, нам уже известно самое главное: символьная строка является массивом типа char, который заканчивается нуль-символом ('\0'). В этой главе мы больше узнаем о структуре строк, о том, как описывать и инициализировать строки, как их вводить или выводить из программы, как работать со строками.

На рис. 13.1 представлена работающая программа, которая иллюстрирует несколько способов создания строк, их чтения и вывода на печать. Мы используем две новые функции: gets, которая получаст строку, и puts, которая выводит строку. (Вы, вероятно, заметили сходство их имен с функциями getchar и putchar.) В остальном программа выглядит достаточно привычно.

/* работа со строками */

#include <stdio.h>

#deline MSG "У

вас, наверное, много талантов.

Расскажите о некоторых" .

/* константа символьной строки */

#define NULL 0

#define LIM 5

#define LINLEN 81 /* максимальная длина строки + 1 */

char ml[ ] = " Только ограничьтесь одной строкой.";

/* инициализация внешнего символьного массива */

char *m2 = " Если вы не можете вспомнить что-нибудь, придумайте.";

/* инициализация указателя внешнего символьного массива */

main

{

char name[LlNLEN];

static char talents[LINLEN];

int i;

int count = 0;

char *m3 = " \n Достаточно обо мне -- Как вас зовут?";

/* инициализация указателя */

static char *mytal[LlM] = ("Быстро складываю числа",

"Точно умножаю",

"Записываю данные",

"Правильно выполняю команды",

"Понимаю язык Си"};

/* инициализация массива строк */

printf("Привет! Я Клайд, компьютер.

У меня много талантов.\n");

printf("%s \n", "Позвольте рассказать о некоторых из них.");

puts(" Каковы они? Ах да, вот их неполный перечень.");

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

puts(mytal[i]); /* печатает перечень талантов компьютера */

puts(m3);

gets(name);

printf(" Хорошо, %s, %s\n" , name, MSG);

printf(" %s\n %s\n", m1, m2);

gets(talents);

puts(" Давайте, посмотрим, получил ли я этот перечень:");

puts(talents);

printf(" Спасибо за информацию, %s \n" , name);

}

PИC. 13.1. Программа, использующая строки.

Чтобы помочь вам разобраться в том, что делает эта программа, мы приводим результат ее работы:

Поделиться с друзьями: