(1 er entier) du tableau.

Documents pareils
DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Chapitre 1 : La gestion dynamique de la mémoire

Introduction au langage C

Bases de programmation. Cours 5. Structurer les données

Rappels Entrées -Sorties

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Le langage C. Séance n 4


Chap III : Les tableaux

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

COURS D'INFORMATIQUE: LANGAGE C NOTES DE COURS

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Programmation en langage C

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

Claude Delannoy. 3 e édition C++

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Programmation en C. École Nationale Supérieure de Techniques Avancées. Pierre-Alain Fouque et David Pointcheval

Java Licence Professionnelle CISII,

Algorithmique et Programmation, IMA

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Les chaînes de caractères

Algorithmique, Structures de données et langage C

SUPPORT DE COURS. Langage C

Le Langage C Licence Professionnelle Qualité Logiciel Pr. Mouad BEN MAMOUN ben_mamoun@fsr.ac.ma Année universitaire 2011/2012

Cours d initiation à la programmation en C++ Johann Cuenin

Logiciel de base. Première année ENSIMAG

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

INITIATION A LA PROGRAMMATION

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Anis ASSÈS Mejdi BLAGHGI Mohamed Hédi ElHajjej Mohamed Salah Karouia

I. Introduction aux fonctions : les fonctions standards

Gestion de la mémoire

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

as Architecture des Systèmes d Information

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Compression de Données - Algorithme de Huffman Document de Conception

Le prototype de la fonction main()

UE C avancé cours 1: introduction et révisions

Programmation Structurée en Langage C

Programmation impérative

Cours Programmation Système

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

Programmation C. J.-F. Lalande. 15 novembre 2012

Introduction au Langage de Programmation C

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

V- Manipulations de nombres en binaire

Cours de C. Allocation dynamique. Sébastien Paumier

Les structures de données. Rajae El Ouazzani

Les processus légers : threads. Système L3, /31

Programmation Classique en langage C

Programmation système I Les entrées/sorties

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Généralités sur le Langage Java et éléments syntaxiques.

Travaux Dirigés n 1 : chaînes de caractères

Programme Compte bancaire (code)

Plan du cours. Historique du langage Nouveautés de Java 7

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Cours d Algorithmique et de Langage C v 3.0

Conventions d écriture et outils de mise au point

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

Programmer en JAVA. par Tama

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

BTS IRIS Cours et Travaux Pratiques. Programmation C. A. Lebret, TSIRIS, Lycée Diderot, 1995/06. en conformité avec le référentiel du BTS IRIS

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; };

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Programmation système de commandes en C

Les débordements de tampons et les vulnérabilités de chaîne de format 1

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon

Recherche dans un tableau

INF 104 (SELC) Introduction au langage C

Analyse de sécurité de logiciels système par typage statique

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Programmation en C - Sommaire

3IS - Système d'exploitation linux - Programmation système

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Premiers Pas en Programmation Objet : les Classes et les Objets

Cours de Système : Gestion de Fichiers

Outils pour la pratique

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Table des matières. Chapitre 4 : Variables pointeurs

INITIATION AU LANGAGE JAVA

Notions de Langage C

Le langage C. Introduction, guide de reference

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

GESTION DES FICHIERS C/UNIX

Programmation en langage C Eléments de syntaxe

Langage Éric Guérin 5 octobre 2010

Cours 1: Java et les objets

MINIMUM. connaissances nécessaires à la programmation des microcontrôleurs PIC18 en langage C (une introduction au langage c A.N.S.

Transcription:

4. Pointeurs P et Tableaux En C, il existe une relation très étroite entre tableaux et pointeurs. Ainsi, chaque opération avec des indices de tableaux peut aussi être exprimée à l'aide de pointeurs. Comme déjà mentionné ( au chapitre 6), le nom d'un tableau représente l'adresse de son premier élément : Tableau à un dimension (int T[N]) : le nom T du tableau est un pointeur constant sur le premier élément (1 er entier) du tableau T et &T[0] contiennent l adresse du premier élément (1 er entier) du tableau. Tableau à deux dimensions( int T[N][M]) : le nom T est un pointeur constant sur le premier tableau (d entiers). T[i] est un pointeur constant sur le premier élément (1 er entier) du i ème tableau. T et T[0] contiennent la même adresse mais leur manipulation n est pas la même puisqu ils ne représentent pas le même type de pointeur. 4.1 Adressage et accès s aux composantes d un d tableau à une dimension En déclarant un tableau A de type int (int A[N]) et un pointeur P sur des variables entière (int *P), l'instruction P = A crée une liaison entre le pointeur P et le tableau A en mettent dans P l adresse du premier élément de A (de même P = &A[0]). A partir du moment où P = A, la manipulation du tableau A peut se faire par le biais du pointeur P. En effet : p pointe sur A[0] *p désigne A[0] p+1 pointe sur A[1] *(p+1) désigne A[1]. p+i pointe sur A[i] *(p+i) désigne A[i] où i [00, N-1] N 1

4.1.1 Exemple ( Lecture et Affichage d'un tableau matérialis rialisé par un pointeur) #define N 10 void main() float t[n], *pt ; int i ; printf("entrez %d entiers\n", N) ; pt = &t[0] ; /* ou pt = t */ for (i = 0 ; i<n; i++) scanf("%f", pt+i) ; /* pt+i pointe sur A[i] */ printf("\ntableau lu : \n") ; for (i = 0 ; i<n ; i++) printf("%7.2f", *(pt+i)) ; /* *(pt+i) équivalente à pt[i] */ /* Autre Solution sans déclarer la variable i */ #define N 10 void main() float T[N], *pt ; printf("entrez %d entiers\n", N) ; for (pt = T ; pt<t+n; pt++) scanf("%f", pt) ; printf("\ntableau lu : \n") ; for (pt = T ; pt<t+n; pt++) printf("%7.2f", *pt) ; 4.2 Adressage et accès s aux composantes d une d matrice En déclarant une matrice A de type int (int A[M][N]) et un pointeur P sur des variables entières (int *P), l'instruction P = A[0] crée une liaison entre le pointeur P et la matrice A en mettent dans P l adresse du premier élément de la première ligne de la matrice A ( P = &A[0][0]). A partir du moment où P = A[0], la manipulation de la matrice A peut se faire par le biais du pointeur P. En effet : p pointe sur A[0][0] et * p désigne A[0][0] p + 1 pointe sur A[0][1] et * ( p + 1 ) désigne A[0][1]. p + N pointe sur A[1][0] et * ( p + N ) désigne A[1][0] p + N + 1 pointe sur A[1][1] et * ( p + N + 1 ) désigne A[1][1]. p + i * N + j pointe sur A[i][j] et * ( p + i * N + j ) désigne A[i][j] où i [00, M-1] M et j [00, N-1]. N 2

4.2.1 Exemple ( Lecture et Affichage d'une matrice matérialis rialisé par un pointeur) #define M 4 #define N 10 void main() short A[M][N] ; short *pt ; int i, j ; for (i = 0 ; i<m ; i++) for (j = 0 ; j<n ; j++) printf("%d", *( pt + i * N + j ) ) ; printf("\n") ; /* lecture d'une matrice */ pt = &A[0][0] ;/* ou bien pt = A[0] ; */ for (i = 0 ; i<m ; i++) printf("\t ligne n %d\n", i+1) ; for (j = 0 ; j<n ; j++) scanf("%i", pt + i * N + j ) ; 4.3 Arithmétiques tiques des pointeurs Affectation par un pointeur sur le même type : Soient P1 et P2 deux pointeurs sur le même type de données. L'affectation : P1 = P2 ; fait pointer P1 sur le même objet que P2. Addition et soustraction d'un nombre entier : Si P pointe sur l'élément A[i] d'un tableau, alors : P+n pointe sur A[i+n] et P-n pointe sur A[i-n] Incrémentation et décrémentation d'un pointeur : Si P pointe sur l'élément A[i] d'un tableau, alors après l'instruction : P++ ; P pointe sur A[i+1] P += n ; P pointe sur A[i+n] P-- ; P pointe sur A[i-1] P -= n ; P pointe sur A[i-n] Comparaison de deux pointeurs : On peut comparer deux pointeurs de même type par : <, >, <=, >=, == ou!= La comparaison de deux pointeurs qui pointent dans le même tableau est équivalente à la comparaison des indices correspondants. 3

4.4 Autres déclarations d des pointeurs : En C, il existe d autres déclarations des pointeurs. En effet : Tableau de pointeurs : int *Tab[20] ; déclare un tableau Tab de 20 pointeurs d entiers. Pointeur de tableaux : int (*pt)[30] ; déclare un pointeur pt sur des tableaux de 30 composantes. Pointeur de pointeurs : int **pt ; déclare un pointeur pt qui pointe sur des pointeurs d entiers. 5. Allocation dynamique La déclaration d d'un tableau définit d un tableau "statique" (il possède un nombre figé d'emplacements). Il y a donc un gaspillage d'espace mémoire m moire en réservant r toujours l'espace maximal prévisible. Il serait souhaitable que l'allocation de la mémoire m moire dépend du nombre d'éléments à saisir. Ce nombre ne sera connu qu'à l'exécution : c'est l'allocation dynamique. 4

5.1 En C, il existe 4 fonctions pour gérer g l l allocation dynamiquement de la mémoire moire Bibliothèque <stdlib.h> char *malloc(taille) char *calloc(taille, sizeof(type)) char *realloc(char *, taille) void free(char *) allocation d un bloc allocation & initialisation d un bloc modification de la taille d un bloc libération d un bloc Chacune des fonctions malloc, calloc ou realloc,, prend une zone d'une taille donnée e dans l'espace mémoire m moire libre réservr servé pour le programme (appelé tas ou heap) ) et affecte l'adresse du début d de la zone à une variable pointeur. S'il n'y a pas assez de mémoire m moire libre à allouer, la fonction renvoie le pointeur NULL. 5.2 Fonctions malloc et free 5.2.1 malloc <pointeur> = <type> malloc(<taille>); - <type> est un type pointeur définissant la variable pointé.par <pointeur> - <taille> est la taille, en octets, de la zone mémoire à allouer dynamiquement. <taille> est du type unsigned int, donc on ne peut pas réserver plus de 65536 octets à la fois - La fonction malloc retourne l adresse du premier octet de la zone mémoire allouée. En cas d échec, elle retourne NULL. 5.2.2 free - Si on n a plus besoin d un bloc de mémoire réservé dynamiquement par malloc, alors on peut le libérer à l aide de la fonction free. free(<pointeur>); - Libère le bloc de mémoire désigné par le pointeur <pointeur> 5

5.2.3 Exemple (Allocation dynamique, Saisie et Affichage d un tableau ) #include <stdlib.h> int main() short *pt; int N, i; printf("entrez la taille N du tableau \n") ; scanf("%d", &N) ; pt = ( short * ) malloc( N * sizeof( short ) ); if (pt == NULL) printf("mémoire non disponible") ; system( return 1; printf("saisie du tableau : "); for ( i = 0 ; i < N; i++) scanf("%d", pt + i ) ; printf("affichage du tableau ") ; for ( i= 0 ; i < N; i++) printf("%d\t", *( pt + i ) ) ; free( pt ); return 0; 6