Pointeurs et tableaux



Documents pareils
Les chaînes de caractères

Chap III : Les tableaux

Rappels Entrées -Sorties

Chapitre 1 : La gestion dynamique de la mémoire

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

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

Programmation impérative

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

Le langage C. Séance n 4

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

Les structures. Chapitre 3

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

Algorithmique et Programmation, IMA

SUPPORT DE COURS. Langage C

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

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

COURS D'INFORMATIQUE: LANGAGE C NOTES DE COURS

Introduction au langage C

Logiciel de base. Première année ENSIMAG

UE Programmation Impérative Licence 2ème Année

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

Programmation système de commandes en C

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

Claude Delannoy. 3 e édition C++

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

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

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

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

TP, première séquence d exercices.

Les fichiers. Chapitre 4

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

INITIATION A LA PROGRAMMATION

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

Introduction à MATLAB R

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

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

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


Programmation système I Les entrées/sorties

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Algorithmique, Structures de données et langage C

Structurer ses données : les tableaux. Introduction à la programmation

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Les structures de données. Rajae El Ouazzani

Support de Cours de Langage C. Christian Bac

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

Programmation en langage C

Programmation Classique en langage C

TD3: tableaux avancées, première classe et chaînes

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

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

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

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

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)

Cours d Algorithmique et de Langage C v 3.0

TP : Gestion d une image au format PGM

Initiation. àl algorithmique et à la programmation. en C

Poker. A rendre pour le 25 avril

Architecture des Systèmes d Information Architecture des Systèmes d Information

Cours 1: Java et les objets

Cours de C/C++ par la pratique. Hugues Talbot

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

Recherche dans un tableau

Conventions d écriture et outils de mise au point

Utilisation d objets : String et ArrayList

Introduction au Langage de Programmation C

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

COURS et TP DE LANGAGE C++

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

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

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

Programmer en JAVA. par Tama

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Java Licence Professionnelle CISII,

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

Programmation Structurée en Langage C

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

IFT3030 Base de données. Chapitre 2 Architecture d une base de données

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

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

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

Plan du cours Cours théoriques. 29 septembre 2014

Logiciel de Base. I. Représentation des nombres

Langages et Concepts de Programmation Introduction à la programmation en langage C

Programmation structurée et Langage C. L informatique à Phelma. Première séance. Lancer un terminal

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Langage Java. Classe de première SI

Structure d un programme

PROGRAMMATION PAR OBJETS

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

INF 104 (SELC) Introduction au langage C

Architecture des ordinateurs

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

COMPARAISONDESLANGAGESC, C++, JAVA ET

as Architecture des Systèmes d Information

Programmation en C - Sommaire

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Introduction à la Programmation Parallèle: MPI

Transcription:

Pointeurs et tableaux Pointeur Tout mot (octet) de la mémoire est identifié par un numéro unique : son adresse mémoire On peut donc identifier toute zone mémoire servant au stockage d une variable par : Son adresse de début Sa taille (qui dépend du type de la variable) Notation utilisée : y x représente un objet dont l adresse est y et dont la valeur est x Cette valeur peut elle-même être une adresse. 2 1

Déclaration de variable 3 Occupation mémoire A toute variable créée est associée une zone de la mémoire, servant à stocker le contenu de cette variable La taille de cette zone mémoire dépend du type de la variable considérée : char : un octet int : 2,4 ou 8 octets (ici 4) float : 4 octets double : 8 octets etc 4 2

Opérateur sizeof l opérateur sizeof donne la taille en octets du type ou de la variable passée en paramètre Ce n est pas une fonction normale Évaluée et rem placée par la constante entière correspondante lors de la compilation printf ("Sur m on système, un int fait %d octets\n", sizeof (int));/* Taille d'un type */ double d; printf ("Sur m on systèm e, un double fait %d octets\n", sizeof (d));/* Taille d'une variable du type */ 5 Tableaux (1) Un tableau est une collection de variables de même type que l on peut accéder individuellement par leur indice dans le tableau On déclare la taille du tableau entre «[]» int a[10]; /*définit un vecteur de 10 entiers consécutifs */ On accède à un élément d un tableau en donnant l indice de l élément entre «[]» En C, les indices commencent à 0 a[3] désigne la valeur du 4 ème élément du tableau a 6 3

Tableaux (2) On peut initialiser le contenu d un tableau lors de sa déclaration Liste de constantes du type adéquat, entre accolades Nombre d éléments comptés par le compilateur int t[7] = {2,4,7,5,6,3,1}; int t[]={2,4,7,5,6,3,1}; /*le compilateur comptera*/ La liste peut n être que partielle : int t[7] = {2,4,7,5}; /*7 places prises, 4 initialisées */ 7 Tableaux (3) Si t est de type type, t[i] est donc le contenu de la zone mémoire : Commençant à l octet d adresse (t + i * sizeof(type)) De taille sizeof(type) adresse de début i = 2 int : 4 octets t[2] adresse croissante 8 4

Tableaux et pointeurs (1) Un tableau est un pointeur sur une zone mémoire de variables contiguës de même type On peut utiliser un nom de tableau comme pointeur int t[7]; /* Tableau de 7 entiers */ int *r; /*Pointeur sur un entier */ r = t; /*t est en fait de type (int *) */ a = t[0]; /*Lecture du premier élément du tableau */ b = *r; /*Comme r pointe sur t, on lit aussi t[0] */ c = *t; /*Comme t est un (int *), ceci marche aussi */ t = r; /* Ne marche pas! T est une constante */ 9 Tableaux et pointeurs (2) Tableaux et pointeurs étant de même type, on peut également utiliser la notation «[ ]» à partir de variables de types pointeurs : «[i]» veut dire : contenu de la ième case de type adéquat, comptée à partir de l adresse du pointeur int t[7]; /* Tableau de 7 entiers */ int *r; /* Pointeur sur un entier */ r = &t[2]; /* On pointe sur la troisième case de t */ r[1] = 12; /* On met 12 dans r[1], c est-à-dire t[3] */ r t t[0] t[1] t[2] t[3] t[4] t[5] t[6] 10 5

Arithmétique des pointeurs (1) À partir d un pointeur, on peut créer un pointeur de même type mais pointant à i cases en amont ou en aval q = &p[i]; /* i indifféremment positif ou négatif */ On peut simplifier cette expression en définissant une arithmétique des pointeurs : p+i &p[i] P i &p[-i] int t[7]; /*Tableaude7entiers */ int *r; /*Pointeur sur un entier */ r = t +2; /*Identique à l exemple précédent */ 11 Tableaux multidimensionnels (1) Il est possible de déclarer des tableaux multidimensionnels en spécifiant plusieurs paires de «[ ]» int t[7][3]; /* Tableau de 7 lignes et 3 colonnes */ Les données sont stockées par ligne majeure, c est-à-dire que dans t[n][m], la case t[i+1][0] est stockée après la case t[i][m-1] int t[2][3] = {{1,2,3};{4,5,6}}; t 1 2 3 4 5 6 t[0,0] t[0,1] t[0,2] t[1,0] t[1,1] t[1,2] 12 6

Tableaux multidimensionnels (2) Le compilateur effectue les calculs d adresses de façon à accéder à la bonne case du (sous)-tableau stocké de façon linéaire int t[2][3]= {{1, 2, 3 }, {4, 5, 6}}; int * li0; /* Pointeur sur la première ligne */ int * li1; /* Pointeur sur la deuxième ligne */ li1 =t[1]; /*t de type(int **),t[1]de type(int *) */ li0 = t[0]; /* Même valeur d'adresse, pas même type! */ li1[1]=7; /*Écriture tout à fait correcte */ t[0][4]=7; /*Pas de vérification de débordement! */ li1 li2 t 1 2 3 4 5 7 6 13 Tableaux multidimensionnels (3) On peut émuler des tableaux multidimensionnels au moyen de pointeurs de pointeurs int *t[2]; /* t est de type (int **) */ int t1[4] = {2,4,6,8}; int t2[2] = {3,7}; t[0] = t1; t[1] = t2; a = t[0][3]; /* a = 8 */ b = t[1][0]; /* b = 3 */ c = t[1][3]; /* En dehors des limites! */ t t1 t2 2 4 6 8 3 7 14 7

Chaînes de caractères Il n existe pas de type chaîne spécifique Une chaîne de caractères est un tableau unidimensionnel de caractères Le nom de chaîne fait référence à l adresse de début du premier caractère de la chaîne Une chaîne de caractères bien fermée est toujours terminée par un caractère nul \0 Indique où le contenu utile de la chaîne finit Ne pas oublier de compter réserver sa place. 15 Chaînes de caractères (2) On peut déclarer et initialiser une chaîne de caractères comme on déclare un tableau de caractères car t[] = { a, b, c, \0 }; Il est cependant préférable d utiliser les constantes char t[] = Bonjour\n ; /* Tableau modifiable en mémoire */ char *s = Salut ; /* Pointeur sur une constante */ t[1] = Z ; /* Légal car t est modifiable */ s[1] = Z ; /* Segfault car zone constante */ s = t; /* Légal car s est une variable */ 16 8

Affichage de chaînes Directement dans printf si chaîne simple Code %s pour afficher des chaînes La chaîne est affichée jusqu au premier \0 rencontré char t[]= "Bonjour\n"; char * s = "Salut!"; char * r = "%set aussi %s\n"; printf ("Bonjour\n"); /* Le compilat. crée une chaîne constante */ printf(t); /*Attention : pas de "%" dans la chaîne! */ printf ("%s", t); /* Le plus sûr si on n'est pas sûr de t */ printf (r, t, s); /* Possible mais délicat */ 17 Entrée de chaînes On utilise scanf Code %s aussi Pas besoin du «&» car une chaîne est déjà une référence sur une zone mémoire Limiter la taille avec la syntaxe %num pour éviter les débordements de tampons char str[10]; /* Une chaîne de 10 caractères */ int a; printf( Entrez votre nom : ); scanf( %s,str); /* Pas de «&» car str est une référence*/ scanf ( %9s,str); /*On limite à 1 de moins (pour \0)*/ 18 9

Fonctions de manipulation de chaînes Définies dans la bibliothèque <string.h> strlen () : renvoie la taille courante d une chaîne (pas la taille maximale du tableau) strcpy() : copie d une chaîne source vers un tableau de caractères destination strcat() : ajout d une chaîne source à a fin d une chaîne destination strchr() : recherche de la première occurrence d un caractère dans une chaîne etc 19 10