Транспонирование матрицы
Указатель как результат функции
Использование указателей
Gcc —o two_file_proj two_f_pr1.o two_f_pr2.o
Пример двухфайлового проекта
Gcc one_file_projeckt.c
Пример однофайлового проекта
Примеры программ
#include <stdio.h>
main()
{
int i=1, j=2, k, l:
k = f1(i):
l = f2(j);
f3(k, l);
}
int f1(int a)
{ return (a*10) }
int f2(int a)
{ return (a*20) }
int f3(int a, int b)
{ printf(“Result = %d \n”, a+b) }
Компиляция в Unix-подобной среде (в исполняемый файл с предопределенным именем a.out
Запуск на выполнение./a.out
Результат выполнения Result = 50
Файлы two_f_pr1.c и two_f_pr2.c
Файл two_f_pr1.c main() { int i=1, j=2, k, l; k = f1(i); l = f2(j); f3(k, l); } int f1(int a) { return (a*10) } | Файл two_f_pr2.c int f2(int a) { return (a*20) } int f3(int a, int b) #include <stdio.h> { printf(“Result = %d \n”, a+b) } |
Компиляция в объектные файлы two_f_pr1.o и two_f_pr2.o
gcc —c two_f_pr1.c
gcc —c two_f_pr2.c
Сборка объектных файлов two_f_pr1.o и two_f_pr2.o в исполняемый two_file_proj
Запуск на выполнение./two_file_proj
Результат выполнения Result = 50
#include <stdio.h>
main()
{
int a=1, b=2, *px,*py; // a,b — целые, px, py - адреса целых переменных
printf("a= %d b=%d \n",a,b);
px=&a; // адрес px теперь указывает на данное а
|
|
py=px+1; // адрес py — это адрес целого данного, следующего в памяти
// за данным, адресуемым px
printf("*px= %d *py= %d px= %x py= %x\n",*px,*py, px, py);
/*на терминал выводятся данные, адресуемые указателями px и py, а также значения самих указателей в шестнадцатеричном виде */
}
Вывод на терминал результата выполнения имеет вид:
a= 1 b=2
*px= 1 *py= 2 px= bfa69560 py= bfa69564
Вопрос: какова длина данного int — типа для аппаратной платформы, на которой выполнен этот пример, как это можно определить?
#include <stdio.h>
#include <stdlib.h> // этот заголовочный файл необходим для выделения памяти для
// величины, адресуемой указателем
main()
{
int a, b, c,d, summa,*px,*py;
int *f(int a1, int a2); // прототип —описание функции
a=1;b=2;c=3;d=4;
px=f(a,b);
py=f(c,d);
printf("summa= %d \n",*px+ *py);
}
int *f(int a,int b)
{
int *s;
s=malloc(sizeof(int)); /* выделение памяти для величины, адресуемой s */
printf("a= %d b=%d \n",a,b);
*s=a+b;
return(s);
}
Результат выполнения выводится на терминал в виде
a= 1 b=2
a= 3 b=4
summa= 10
Пример демонстрирует транспонирование матрицы А(i,j), i, j =1..n в матрицу B, B(j,i) = A(i, j)
1 2 3 1 4 7
A 4 5 6 B 2 5 8
7 8 9 3 6 9
#include <stdio.h>
main()
{
int i,j;
int a[3][3]={1, 2, 3, 4, 5, 6,7,8,9}, b[3][3],*pa;
pa=a; // указателю присвоен адрес массива a
for (i=0; i<=2; i++)
for(j=0; j<=2; j++)
b[j][i] = *(pa +3*i + j);
for (i=0; i<=2; i++)
{
for(j=0; j<=2; j++)
printf (" %d ", b[i][j]);
printf ("\n");
}
}
Пример содержит описание данных о гипотетическом человеке, включающее фамилию, рост, вес и примечания, приведены описание структуры, создание переменной и ее инициализация, а также вывод отдельных полей структуры.
#include <stdio.h>
main()
{
struct INFO
{ char fio[20];
int rost;
float ves;
char comment[40];
};
struct INFO man = { “Иванов”, 182, 82.5, “no comment” };
printf("FIO= %s \n ROST=%d \n VES= %f\n COMMENT= %s \n",
|
|
man.fio, man.rost, man.ves, man.comment);
printf("First letter in fio is %c \n",man.fio[0]);
}
Выдача результата на терминал имеет вид
FIO= Иванов
ROST=182
VES= 82.500000
COMMENT= No comment