Showing posts with label pointer. Show all posts
Showing posts with label pointer. Show all posts

Wednesday, March 05, 2025

Practical Examples of Using Operators in the C Programming Language

In the C programming language, operators are symbols that enable the execution of specific operations on data, such as mathematical calculations, logical comparisons, or bit manipulations. Operators are symbols that instruct the compiler what to do with operands in an expression. Understanding operators is crucial for writing efficient and effective code. The C programming language is known for its simplicity and direct hardware control, which is reflected in its set of operators. C programming language operators reflect its low-level and efficiency philosophy. Unlike higher-level languages such as Python or JavaScript, the C programming language does not have operators for advanced functionalities like exponentiation ** in the Python programming language because it focuses on simplicity and control. Bitwise and pointer operators make the C programming language powerful for system programs, while the lack of logical types or automatic memory management requires greater programmer attention compared to modern languages. Essentially, C programming language operators are the foundation for many other languages, but their directness and minimalism remain unique.

Operators in the C programming language require deeper knowledge

Operators in the C programming language require deeper knowledge

The C programming language supports a wide range of operators used for various data operations. Each operator has its own specific behavior and rules of application, which allows programmers to manipulate data in various ways and execute complex operations. Correct use of operators can significantly improve code performance and readability. Operators in C programming language can be categorized into several types:
  • Arithmetic Operators
  • Assignment Operator
  • Compound Assignment Operators
  • Relational (Comparison) Operators
  • Logical Operators
  • Bitwise Operators
  • Unary Operators
  • Ternary Operators
  • Pointer Operators
  • Size and Type Operators
  • Etc.

Basic Arithmetic Operators in the C Programming Language: Everything You Need to Know

Sunday, December 13, 2015

Vrednosni i referentni tipovi podataka u C# programskom jeziku


Iz onog što ste do sada čitali na postovima mog bloka o C# programskom jeziku , vi već sad možete predvideti koliko se ovaj programski jezik razlikuje od drugih programskih jezika i koliko međujezik IL – Intermediate Language ima ključnu ulogu u okruženju .Net Framework-a. Glavna osobina IL jeste upravo veoma precizno razlikovanje vrednosni i referentni tipova podataka. Zato i vi kao programer morate da razlikujete vrednosni i referentni tip podataka i da tačno znate kad koji treba koristiti. Takođe, trebate uvek biti svesni da C# kompajler kompajlira jedino kontrolisani kod i da IL vrši strogo tipiziranje podataka, upravlja greškama putem izuzetaka, koristi atribute i apsolutno je okrenut objektno orijentisanosti i korišćenju raznih tipova klasa i interfejsa. Osnovna razlika između vrednosnog i referentnog tipa je sam način kako se ovim tipovima pristupa.




( Vrednosni i referentni tipovi podataka u C# programskom jeziku )


Value types – vredosni tipovi su tipovi koji svoju vrednost direktno čuvaju u memoriji. U C++ programskom jeziku, takve tipove zovu jednostavni tipovi podataka. Vrednosni tipovi podataka se uvek čuvaju na steku. Kad izađu iz zone delovanja, skroz se brišu i oslobađaju memoriju. Oni imaju fiksiranu veličinu i kad ih deklarišete, vi u stvari vršite alokaciju bloka memorije dovoljno velikog da čuva odgovarajuću vrednost. Kad vršite kopiranje vrednosnog tipa pravi se nova promenjiva i zato se promene kod originala i obratno ne odražavaju. Vrednosni tipovi podataka su:

Predefinisani celobrojni tipovi podataka
  • byte – System.Byte
  • sbyte – System.SByte
  • short – System.Int16
  • ushort – System.UInt16
  • int – System.Int32
  • uint – System.UInt32
  • long – System.Int64
  • ulong – System.UInt64
Predefinisani tipovi podataka sa pokretnim zarezom
  • float – System.Single (32bit)
  • double – System.Double (64bit)
  • decimal – System.Decimal (128bit)
Predefinisani boolean i char vrednosni tipovi
  • bool – System.Boolean
  • char – System.Char
Nepredefinisani vrednosni tipovi
  • Struct – Struktura
  • Enum – Enumerator
Reference types – referentni tipovi su tipovi koji čuvaju samo adresu ili referencu na vrednost. Kada pravite referentni tip, vi u stvari odvajate samo mali deo memorije koji čuva adresu drugog bloka memorije u managed heap – kontrolisanom hipu. Preciznije, referentni tip se nalazi na dve memorijske lokacije. Pravi podaci su na hipu dok promenjiva koja sadrži pokazivač na taj objekat se nalazi na steku. Kad ta promenjiva izađe iz zone delovanja, referenca objekta se briše ali ne i sam objekat. Ukoliko postoje druge reference na isti objekat, objekat ostaje nedirnut. Da, vi možete imati više referenci na isti objekat, ali najvažnije je da shvatite kad se vrednost promeni na objektu, promeniće se i na svim referencama. Referenti tipovi podataka su:
  • string – System.String
  • object – System.Object
ali i:
  • Class – klasa
  • Array – niz
  • Interface – interfejs
  • Delegate – delegat
Da li su referentni tipovi pokazivači?

Friday, October 09, 2015

Pokazivači u C++ programskom jeziku


Ukoliko idete na intervju za pisanje tehničke literature iz oblasti C i C++ programiranja za Microsoft korporaciju; šta tek da kažemo za radno mesto C++ programera; velika je verovatnoća da će vas pitati da im objasnite šta su to pokazivači. I pored toga što većina programera smatra da su pokazivači jedan od najmoćnijih alata i suština C i C++ programskog jezika jer manipulišu memorijom računara direktno, oni mogu biti zbunjujući i mnogim početnicima nije jasno zašto su oni u stvari i potrebni. Da bi ste razumeli pokazivače pre svega treba da razumete kako funkcioniše računarska memorija.


( Zvezdica * operator nam omogućava pristup vrednosti iz memorijske adrese )

Računarska memorija je kod svakog računara i kod drugih računarskih uređaja uvek podeljena na sekvencijalno označene memorijske adrese. Procesor razume samo brojeve i zbog toga procesor referiše lokacije u memoriji pomoću brojeva u heksadecimalnoj notaciji. Kompjuteri označavaju memoriju koristeći različite kompleksne šeme. Vi ne morate znati koji su to brojevi iako ih uvek možete odštampati upotrebom ampersanda &. Ovako: 

#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
       short i = 8;

       cout << &i << endl << endl;

       system("PAUSE");
       return 0;

}

Kad pokrenete ovaj program, vaš rezultat će biti nešto poput ovog ali ne isto:

0104FC64 

Press any key to continue . . . 

Svaki put kad pokrenete program, ovaj broj dobićete drugi heksadecimalni broj memorijske adrese gde je računar smestio promenjivu i tipa short. Ali uvek će zauzimati 2 bita u memoriji koliko tip short zauzima za svoju vrednost. Zašto? Zato što računar uvek iznova rezerviše memorijsku adresu kad pokrenete vaš program dok rezervacija memorije zavisi od mnogo faktora i BIOS-a i celog vašeg operativnog sistema. Sad kad znate šta je i kako funkcioniše memorijska adresa, onda je lako pretpostaviti šta je pokazivač.

Šta je pokazivač?