Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №10.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
234.5 Кб
Скачать

Пример 2.

Вариант программы на С:

//Операции над указателями

#include <stdio.h>

#include <conio.h>

int _main(void)

{

int a,c,b;

int *ca, *cb;

int *sa, *sb, *sc;

printf("a = ", &a);

printf("b = ", &b);

c=a+b;

sb=&b;//инициализация указателей через взятие адреса

sa=&a;

sc =&c;

//присваивание указателю значения выражения

*sc = c+a-b;

ca=sa;//присваивание указателю значения другого указателя

cb=sb;

*sa=12;//присваивание указателю значения константы

printf("\n*ca = %d",*ca);

printf("\n*cb = %d",*cb);

printf("\n*sb = %d",*sb);

printf("\n*sc = %d",*sc);

printf("\nca = %p",ca);

printf("\ncb = %p",cb);

printf("\nsc = %p",sc);

printf("\na = %d",a);

printf("\nb = %d",b);

printf("\nc = %d",c);

printf("\n&a = %p",&a);

printf("\n&b = %p",&b);

printf("\n&c = %p",&c);

printf("\n*&a = %d",*&a);

printf("\n*cb-*ca = %d", *cb-*ca);

printf("\n*cb+*ca = %d", *cb+*ca);

*cb+=2; //сложение с константой

printf("\ncb = %p", cb);

cb++; //инкремент

printf("\ncb = %p", cb);

ca--; //декремент

printf("\ncа = %p", ca);

printf("\ncb-ca = %d", cb-ca);

_getch();

return 0;

}

Вариант программы на С++:

//Операции над указателями

#include "stdafx.h"

#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[]){

int a,c,b;

int *ca, *cb;

int *sa, *sb, *sc;

cout << "a = "; cin >> a;

cout << "b = "; cin >> b;

c=a+b;

sb=&b;//инициализация указателей через взятие адреса

sa=&a;

sc =&c;

//присваивание указателю значения выражения

*sc = c+a-b;

ca=sa;//присваивание указателю значения другого указателя

cb=sb;

*sa=12;//присваивание указателю значения константы

cout << "\n*ca = " << *ca;

cout << "\n*sa = " << *sa;

cout << "\n*cb = " << *cb;

cout << "\n*sb = " << *sb;

cout << "\n*sc = " << *sc;

cout << "\nca = " << ca;

cout << "\ncb = " << cb;

cout << "\nsc = " << sc;

cout << "\na = " << a;

cout << "\nb = " << b;

cout << "\nc = " << c;

cout << "\n&a = " << &a;

cout << "\n&b = " << &b;

cout << "\n&c = " << &c;

cout << "\n*&a = " << *&a;

cout << "\n*cb-*ca = " << *cb-*ca;

cout << "\n*cb+*ca = " << *cb+*ca;

*cb+=2; //сложение с константой

cout << "\ncb = " << cb;

cb++; //инкремент

cout << "\ncb = " << cb;

ca--; //декремент

cout << "\ncа = " << ca;

cout << "\ncb-ca = " << cb-ca;

system("pause");

return 0;

}

!

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

Пример 3.

Вариант программы на С:

#include <stdio.h>

#include <conio.h>

int _main(void)

{

int x=10;

int y=10;

int *xptr=&x;

int *yptr=&y;

//сравниваем указатели

if (xptr == yptr)

printf("Указатели равны\n");

else

printf("Указатели неравны\n");

//сравниваем значения, на которое указывает указатель

if (*xptr == *yptr)

printf("Значения равны\n");

else

printf("Значения неравны\n");

_getch();

return 0;

}

Вариант программы на С++:

#include "stdafx.h"

#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[]){

int x=10;

int y=10;

int *xptr=&x;

int *yptr=&y;

//сравниваем указатели

if (xptr == yptr)

cout << "Указатели равны\n";

else

cout << "Указатели неравны\n";

//сравниваем значения, на которое указывает указатель

if (*xptr == *yptr) {

cout << "Значения равны\n";

} else {

cout << "Значения неравны\n";}

system("pause");

return 0;

}

В приведенном примере результат первой операции сравнения будет ложным, а второй – истинным, поскольку переменные x и y имеют одно и то же значение.