Opisy funkcji Adres strony WWW : html 2.0.6/html_node/libc_528.html.

Slides:



Advertisements
Podobne prezentacje
Tablice 1. Deklaracja tablicy
Advertisements

C++ wykład 4 ( ) Przeciążanie operatorów.
Język C/C++ Funkcje.
Klasa listy jednokierunkowej Przekazywanie parametrów do funkcji
Operatory.
Wskaźniki repetytorium Wskaźniki int Y = 1, X = 2; X = 5; int *p = &X; Y X p 4 4 p = &Y; *p = 4; 5.
UKŁADY TRÓJFAZOWE Marcin Sparniuk.
1 Wskaźniki w C Podstawy podstaw podstaw podstaw.....
Prowadzący: mgr inż. Elżbieta Majka
Języki programowania C++
Sortowanie na stercie Heap Sort
dynamiczny przydział pamięci
argumenty wiersza poleceń: getopt
Czy procesor musi się grzać? Np. dodawanie 2 liczb 1-bitowych. Możliwych stanów początkowych: cztery Możliwych stanów końcowych: dwa to można opisać jako.
Uzupełnienie dot. przekazywania argumentów #include struct nowa { int f; char line[20000]; int k; } reprezentant; int main() { void funkcja7( struct nowa.
formatowanie kodu źródłowego
Dyrektywy preprocesora #define identyfikator znacznik (definiowanie stałych symbolicznych) #define MAXL 512 for( i=1; i
1 1 Przykład 1/3 main() { int i,j,k,m; /* i-m : $s0-$s3 */... i = mult(j,k);... m = mult(i,i);... } int mult (int mcand, int mlier){ int product; product.
Funkcje Modularyzacja : program główny , funkcje Funkcje :
Zakres i zasięg deklaracji Zakres : obszar programu, w którym identyfikator może być użyty zakres globalny : cały program zakres lokalny : definicja pojedynczej.
Metody numeryczne Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
Programowanie imperatywne i język C
Modularyzacja i struktury danych w C Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie.
Modularyzacja i struktury danych w C Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie.
Programowanie imperatywne i język C Copyright, 2005 © Jerzy R. Nawrocki Wstęp.
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Język C – Część II Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
Wskaźniki. Definiowanie wskaźników Wskaźnik może wskazywać na obiekt dowolnego typu. int * w; char * Wsk_Znak; float * Wskaz_Real; Przykłady: Wskaźnik.
Tablice.
1 Dygresja: cztery płyty główne…. 2 Dygresja: osobliwości C /* cos o nieistniejacym typie Boolean */ /* oraz o operatorze przecinkowym */ #include int.
Sprawy organizacyjne 1. Zasady zaliczenia przedmiotu
Wykład 1: Wskaźniki Podstawy programowania Programowanie w C
Język ANSI C Operacje we/wy
#include #include main () { cout
Programowanie obiektowe W2
Polsko – Japońska Wyższa Szkoła Technik Komputerowych
nowe operatory & . (kropka) * operator rzutowy -> , (przecinek)
Podstawy programowania
Podstawy programowania II
Podstawy informatyki (4)
Informatyka I Wykład 5 OPERATORY Priorytety i kolejność obliczeń
Wskaźnik może wskazywać na obiekt dowolnego typu. int * w; char * Wsk_Znak; float * Wskaz_Float; Przykład: Wskaźnik przechowuje adres obiektu wskazanego.
Podstawy programowania w języku C i C++
Informatyka I Wykład 10 WSKAŹNIKI I ADRESY Jerzy F. Kotowski.
Przekazywanie argumentów
sortowanie na bazie – wykorzystanie sortowania ze zliczaniem
Jerzy F. Kotowski1 Informatyka I Wykład 8 STRUKTURA PROGRAMU n Funkcje n Klasy zmiennych n Projekt.
Programowanie strukturalne i obiektowe
Jerzy F. Kotowski1 Informatyka I Wykład 14 DEKLARATORY.
Programowanie obiektowe III rok EiT
STEROWANIE Ale nie tylko
jeszcze dygresja o macierzach...
Składnia pętli do … while do instrukcja while (wyrażenie); gdzie: instrukcja – instrukcja pojedyncza lub blok instrukcji wyrażenie – wyrażenie przyjmujące.
Programowanie strukturalne i obiektowe C++ Przeładowanie operatorów Robert Nowak.
1 struktura #include struct complex {double real; double img; } alfa; struct complex beta={2.0,2.0}, delta; struct complex multi (struct complex x, struct.
1 dynamiczny przydział pamięci malloc() free() realloc() calloc() memset() memcpy( ) mempcpy( ) memmove() (wskaźniki!! )
1 Uzupełnienie dot. przekazywania argumentów #include struct nowa { int f; char line[20000]; int k; } reprezentant; int main() { void funkcja7( struct.
Podstawy informatyki Tablice Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
1 Opisy funkcji Adres strony WWW : html (należy odszukać hyperlink Function Index) (
1 Czy procesor musi się grzać? Np. dodawanie 2 liczb 1-bitowych. Możliwych stanów początkowych: cztery Możliwych stanów końcowych: dwa to można opisać.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
Czy procesor musi się grzać?
Wskaźniki Elżbieta Labocha.
Opisy funkcji Adres strony WWW :
Uzupełnienie dot. przekazywania argumentów
nowe operatory & . (kropka) * operator rzutowy -> , (przecinek)
struktura #include <stdio.h> #include <stdlib.h>
dynamiczny przydział pamięci
Zapis prezentacji:

Opisy funkcji Adres strony WWW : html /html_node/libc_528.html /html_node/libc_528/html

adres zmiennej Do pobrania adresu zmiennej używa się jednoargumentowego operatora & (uwaga & może mieć także znaczenie dwuargumentowego operatora bitowego iloczynu logicznego) Jednoargumentowy operator * jest używany do wskazywania, tzn. jego argument jest adresem zmiennej.

adres zmiennej - przyklad #include int main() { int k; int n; int *palec; palec=&k; k=10; n=(*palec)*15; printf("\n\nk=%5d n=%5d *palec=%5d\n",k,n,*palec); exit(0); } /* koniec funkcji main */ k= 10 n= 150 *palec= 10

Wskaźniki-0 Czy wskaźnik musi mieć typ ? Czy może istnieć wskaźnik uniwersalny? Jeśli tak to: Czy można się posługiwać tylko wskaźnikami uniwersalnymi?

Wskaźniki-1 # include int main() { float a[10]={0.,1.,2.,3.,4.,5.,6.,7.,8.,9.}; float * f1; /* wskaźnik do float */ int * p1; /* wskaźnik do int */ void * s1; /* wskaźnik uniwersalny */ f1 = &a[3]; p1 = &a[5]; /* kompilator zgłosi zastrzeżenia */ s1 = &a[7];

Wskaźniki-2 p1 = s1; /* kompilator OK */ p1 = (int *) s1; /* kompilator OK */ p1 = (int *) f1; /* kompilator OK */ /* nie ma sensu p1 = & 123L; */ printf("\n %d %p %x\n", *p1,p1,p1); printf("\n %f\n", *f1); return (0); } /* koniec funkcji main */

Wskaźniki xbffffa4c bffffa4c

Wskaźniki-4 # include int main() { int * p1; /* wskaźnik do int */ void * s1; /* wskaźnik uniwersalny */ p1=NULL; printf("\n %d \n", *p1); /* segmentation fault */ printf("\n %p \n", p1); return (0); } /* koniec funkcji main */

Wskaźniki-5 wynik programu: Segmentation fault (core dumped) (nil)

Wskaźniki-6 #include int main() { int * p1; /* wskaźnik do int */ void * s1; /* wskaźnik uniwersalny */ p1 = (int *) 1; printf("\n %d \n", *p1); /* segmentation fault */ printf("\n %p \n", p1); return (0); } /* koniec funkcji main */ 0x1

Wskaźnik-7 #include int main() { float x; float * f2; /* wskaźnik do zmiennej typu float */ f2 = & x ; /* !!!! wskaźnik wskazuje na coś rozsądnego */ *f2 = 23.4; printf("\n wartość x wynosi %5.2f\n",x); return (0); } /* koniec funkcji main */ wynik : 23.40

Wskaźniki-8 ( wskaźniki jako argument funkcji call.c str. 213) #include void inc_count(int *count_ptr) { ++(*count_ptr); /* po co nawiasy zwykłe ? */ } /* koniec funkcji inc_count */ int main ( ) { int count=0; /* licznik pętli */ while(count<10) inc_count(&count); printf("\n count=%d\n",count); }/* koniec funkcji main */

Wskaźniki-8 (dygresja) #include int main() { int alfa=10; int * wsk;

Wskaźniki-8 (dygresja) wsk=&alfa; ++(*wsk); printf("\n alfa=%d wsk=%p",alfa,wsk);/* 11 0xbffff2d4 */ ++*wsk; printf("\n alfa=%d wsk=%p",alfa,wsk);/* 12 0xbffff2d4 */ (*wsk)++; printf("\n alfa=%d wsk=%p",alfa,wsk);/* 13 0xbffff2d4 */ *wsk++; printf("\n alfa=%d wsk=%p",alfa,wsk); );/* 13 0xbffff2d8 */ exit(0);/* dobrze, że koniec, bowiem na co wskazuje wsk ?*/ } /* koniec funkcji main */

Dygresja #include int main() { int a=11,b=21,c; c=a+++b++;/* dla pewności lepiej użyć nawiasów ! */ printf(" a,b,c %d %d %d\n", a, b, c); /* wypisze */ exit(0); } /* koniec funkcji main */

Wskaźniki-9 (wskaźniki a macierze) float as[10]; /* każdy element ma długość 4 bajtów */ float * p3; p3 = & as[0]; /* lub */ p3=as; *p3=7; as[0]=7; *(p3+1)=8; as[1]=8;

Wskaźniki-10 (wskaźniki a macierze) float as[10]; /* każdy element ma długość 4 bajtów */ float * p3; p3=as; p3+=4; /* p3 = p3 +4 */ *p3=9; /* as[4]=9; */ /* dodawanie liczby całkowitej do wskaźnika skaluje się automatycznie */

Wskaźniki-10 (dygresja) #include int main() /*czy nazwa macierzy jest pełnoprawnym wskaźnikiem?*/ { int nowa[5]={10,11,12,13,14}; /* inicjalizowanie macierzy */ int * wsk; wsk = nowa; printf("%d %d\n", *wsk, *nowa); /* */ printf("%d %d\n", *(wsk+1), *(nowa+1));/* */ wsk++; /* wskaźnik wsk wskazuje na następną zmienną typu int*/ /* nowa++; tego kompilator nie zaakceptuje...*/ exit(0); }/* koniec funkcji main */

Wskaźniki-11 #include int main ( ) { float x; void * p2; float * p4; x=14; p2=&x; p4=&x; /* printf("\n %f\n",*p2); !!?? błędnie! */ printf("\n %f\n",*(float *)p2); printf("\n %f\n",*p4); }/* koniec funkcji main */

Wskaźniki-12 int main() char bufa[100]=Uniwersytet; char bufb[120]; copy_string(bufb,bufa); copy_string(&bufb[0],&bufa[0]);..... /* koniec funkcji main */

Wskaźniki-13 (str. 220) void copy_string (char *p, char *q) { while ( *p++ = *q++ ) } /* koniec funkcji copy_string */ /* while( *(p++) = *(q++) ) czytelniejsze! */

Wskaźniki (wskaźnik do funkcji) #include int f1(float); int f2(float); void zz ( int(*aa)(float), float t ); int (*f)(float); /* f jest wskaźnikiem do funkcji ! */ int main( ) { int n; scanf("%d",&n);

Wskaźniki (wskaźnik do funkcji) if(n==1) { f=f1; zz(f, (float)n ); } else if(n==2) {f=f2; zz(f, (float)n ); } exit(0); } /* koniec funkcji main */

Wskaźniki (wskaźnik do funkcji) int f1(float x) {printf("\n wewnatrz f1 x=%f\n",x); return(0); }/* koniec funkcji f1 */ int f2(float x) { printf("\n wewnatrz f2 x=%f\n",x); return(0); }/* koniec funkcji f2 */ void zz ( int(*aa)(float), float t ) { (*aa)(t); } /* koniec funkcji zz */

Wskaźnik powinien na coś wskazywać (choćby na NULL) float * f4 = NULL; /* trzeba uważać by obiekt wskazywany nie zniknął !! */

pointer.c #include /* prototyp */ char *dec_bin (unsigned long a); int main () { char *bin_p; bin_p = (dec_bin (119L)); /* 119 to dziesietnie znak w */ printf ("\nTeraz w main: %p\n", bin_p); printf (" Czyli:%c\n\n", *(bin_p)); exit(0); } /* koniec funkcji main */ char * dec_bin (unsigned long dec) { char *wsk; char litera_b; litera_b=dec; printf ("\n wewnatrz funkcji: dec=%ld\n", dec); wsk = &litera_b; printf ("\nwewnatrz funkcji: %p\n", wsk); printf (" Czyli:%c\n\n", *wsk); return (wsk); } /* koniec funkcji dec_bin */

operatory bitowe umożliwiają korzystanie, wykonywanie działań na pojedynczych bitach; zaś np. operator dodawania działa na całej zmiennej! & koniunkcja bitowa | alternatywa bitowa ^ różnica symetryczna ~ negacja bitowa << operator przesunięcia w lewo >> operator przesunięcia w prawo

operatory bitowe - & bit 1bit 2bit1 & bit int c1,c2,c3; c1=0x45; c2=0x71; c3=c1&c2; /* c3 jest równe 0x41 = 65 dziesiętnie */

operatory bitowe - | bit 1bit 2bit1 | bit int c1,c2,c3; c1=0x47; c2=0x53; c3=c1 | c2; /* c3 jest równe 0x57= 87 dziesiętnie*/ x x x57

operatory bitowe - ^ bit 1bit 2bit1 & bit int c1,c2,c3; c1=0x47; c2=0x53; c3=c1 ^ c2; /* c3 jest równe 0x14= 20 dziesiętnie */ x x x14

operatory bitowe - ~ bit ~bit int c1,c3; c1=0x45; c3=~c1; /* c3 jest równe 0xFFFFFFBA= 186 dziesiętnie */

operatory bitowe - << przesuwa w lewo o określona ilość bitów uwaga – przesunięte bity znikają, a nie pojawiają się z prawej strony c 0x1C c<<1 0x c>>2 0x

operatory bitowe - >> jest w nim pewna pułapka, mianowicie miejsce wolne jest zastępowane bitem znaku! np. int k=-1; int l; l=k>>1; /* l jest równe minus jeden ! */

Jak bit ustawic? na przykład chcemy ustawić trzeci bit na jeden int k=1<<3; /* k = 8 dziesiętnie */ int n; n|=k; n=n|k;

Jak bit testowac? na przykład chcemy sprawdzić trzeci bit int k=1<<3; /* k = 8 dziesiętnie */ int n; if( (n&k)!=0 ) printf( trzeci bit =1 ); else printf( trzeci bit =0 );

Jak bit usunąć? na przykład chcemy ustawić trzeci bit na zero int k=1<<3; /* k = 8 dziesiętnie */ int n; n&=~k; n=n & (~k);

pola bitowe int main() { struct aka{ int k:3; int n:3; } beta; beta.n=1; while(1) { printf("\nbeta.n=%d",beta.n); beta.n+=1; /* beta.n=beta.n+1; } exit(0); } /* koniec funkcji main */

wynik programu beta.n = 1 beta.n = 2 beta.n = 3 beta.n = -4 beta.n = -3 beta.n = -2 beta.n = -1 beta.n = 0 beta.n = 1

extern #include extern float alfa; /* plik extern1.c */ int main() { printf("\n alfa=%10.4f\n",alfa); return(0); } /* koniec funkcji main */ float alfa=-66; /* plik extern1a.c */ /* gcc -Wall -ansi extern1.c extern1a.c

extern # include extern float alfa; float alfa=4; /* jeden plik zrodlowy */ int main() { printf("\n alfa=%10.4f\n",alfa); return(0); } /* koniec funkcji main */

malloc (dynamiczna alokacja pamięci) #include struct st { int pole1; int pole2; float pole3; double buf[100000]; } z1, *p1, *p2; main() { p1= &z1; p1->pole1=11.; p1->pole2=13.; p1->pole3=15.; printf("\n"); printf(" pole1 %5d pole2 %5d pole3 %11.3f\n",z1.pole1,z1.pole2,z1.pole3); printf(" sizeof...%d \n\n",sizeof(z1) ); while(1) { p2=malloc(sizeof(z1)); if( p2==NULL) { printf("\n.....zabraklo pamieci..."); break; } (*p2).pole1=21; (*p2).pole2=22; (*p2).pole3=23; /* free(p2);*/ } } /* koniec main*/