mvc open pdf in browser : Extract images from pdf file SDK application service wpf html winforms dnn c11-part874

303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 111 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
Code : Console
177450
Hum. En fait, cela n'est pas très étonnant. On demande la valeur de pointeurSurAge, et sa valeur c'est l'adresse de la variable age
(177450). 
Comment faire pour demander à avoir la valeur de la variable se trouvant à l'adresse indiquée dans pointeurSurAge ? Il faut mettre le
symbole * devant le nom du pointeur : 
Code : C
long age = 10;
long *pointeurSurAge = &age;
printf("%ld", *pointeurSurAge);
Code : Console
10
Hourra ! 
On y est arrivés ! En mettant le symbole * devant le nom du pointeur, on accède à la valeur de la variable age 
Si au contraire on avait mis le symbole & devant le nom du pointeur, on aurait eu l'adresse où se trouve le pointeur (ici, c'est 3) 
Je ne vois pas ce qu'on y gagne. Après tout, sans pointeur on peut très bien afficher la valeur de la variable age !
Cette question (que vous devez inévitablement vous poser) me fait sourire pour 2 raisons : 
La première, c'est que j'étais sûr que vous me diriez ça. Et après tout, qui pourrait vous en vouloir ? Actuellement l'intérêt n'est
pas évident, mais petit à petit, au fur et à mesure des chapitres suivants, vous comprendrez que tout ce tintouin n'a pas été
inventé par pur plaisir de compliquer les choses 
La seconde, elle est toute bête : c'est que je me souviens exactement que j'étais comme vous à ce moment-là lorsque j'apprenais
le C 
Bref, je comprends exactement la frustration que vous devez ressentir. Mais c'est une bien maigre consolation pour vous
j'en conviens 
A retenir absolument
Avant d'aller plus loin, s'il y avait une chose à retenir pour le moment ce serait cela en 4 points : 
Sur une variable, comme la variable age : 
"age" signifie : "Je veux la valeur de la variable age".
"&age" signifie : "Je veux l'adresse où se trouve la variable age".
Sur un pointeur, comme pointeurSurAge : 
"pointeurSurAge" signifie : "Je veux la valeur de pointeurSurAge" (cette valeur étant une adresse).
"*pointeurSurAge" signifie : "Je veux la valeur de la variable qui se trouve à l'adresse contenue dans pointeurSurAge"
Contentez-vous de bien retenir ces 4 points. Faites des tests et vérifiez que ça marche. 
Voici un schéma qui va vous permettre de bien situer qui désigne quoi : 
Extract images from pdf file - Select, copy, paste PDF images in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support PDF Image Extraction from a Page, a Region on a Page, and PDF Document
extract photo from pdf; extract photos pdf
Extract images from pdf file - VB.NET PDF Image Extract Library: Select, copy, paste PDF images in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support PDF Image Extraction from a Page, a Region on a Page, and PDF Document
extract text from image pdf file; how to extract images from pdf files
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 112 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
Attention à ne pas confondre les différentes significations de l'étoile ! Lorsque vous déclarez un pointeur, l'étoile sert juste à
indiquer qu'on veut créer un pointeur : 
Code : C
long *pointeurSurAge;
En revanche, lorsque vous utilisez votre pointeur ensuite en écrivant : 
Code : C
printf("%ld", *pointeurSurAge);
... cela ne signifie pas "Je veux créer un pointeur" mais : "Je veux la valeur de la variable sur laquelle pointe mon
pointeurSurAge". 
Tout cela est fon-da-men-tal. Il faut savoir cela par cœur, et surtout le comprendre. Même pas la peine de continuer ce chapitre si vous
n'avez pas compris cela, je préfère être franc 
N'hésitez pas à lire et relire ce qu'on vient d'apprendre. Je ne peux pas vous en vouloir si vous n'avez pas compris du premier coup, et ce
n'est pas une honte non plus d'ailleurs. 
Pour info, avant que j'arrive à comprendre cela il a dû se passer une petite semaine (bon pas à temps plein je l'avoue 
). 
Et pour comprendre la plupart des subtilités des pointeurs, je crois qu'il m'a fallu bien 2 ou 3 mois au moins (pas à temps plein là non
plus, rassurez-vous 
C# PDF Text Extract Library: extract text content from PDF file in
Ability to extract highlighted text out of PDF control provides text extraction from PDF images and image extracting PDF text to another PDF file, TXT and SVG
some pdf image extractor; extract jpeg from pdf
VB.NET PDF Text Extract Library: extract text content from PDF
Extract highlighted text out of PDF document. control provides text extraction from PDF images and image extracting PDF text to another PDF file, and other
extract text from pdf image; extract pictures pdf
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 113 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
Bref, si vous vous sentez un peu perdus, pensez à ces gens qui sont aujourd'hui des grands gourous de la programmation : aucun d'entre
eux n'a compris tout le fonctionnement des pointeurs du premier coup. 
Et si jamais cette personne existe, croyez-moi j'aimerais la rencontrer 
Envoyer un pointeur à une fonction
Le gros intérêt des pointeurs (mais ce n'est pas le seul), c'est de les envoyer à des fonctions pour qu'ils modifient directement une
variable en mémoire, et non une copie comme on l'a vu. 
Comment ça marche ? Il y a en fait plusieurs façons de faire. Voici un premier exemple : 
Code : C
void triplePointeur(long *pointeurSurNombre);
int main(int argc, char *argv[])
{
long nombre = 5;
triplePointeur(&nombre)// On envoie l'adresse de nombre à la fonction
printf("%ld", nombre)// On affiche la variable nombre. La fonction a directement
modifié la valeur de la variable car elle connaissait son adresse
return 0;
}
void triplePointeur(long *pointeurSurNombre)
{
*pointeurSurNombre *= 3// On multiplie par 3 la valeur de la variable nombre
}
Code : Console
15
La fonction triplePointeur prend un paramètre de type long* (c'est-à-dire un pointeur sur long). Voici ce qu'il se passe dans l'ordre, en
partant du début du main : 
1.  Une variable nombre est créée dans le main. On lui affecte la valeur 5. Ca, vous connaissez.
2.  On appelle la fonction triplePointeur. On lui envoie en paramètre l'adresse de notre variable nombre.
3.  La fonction triplePointeur reçoit cette adresse dans pointeurSurNombre. A l'intérieur de la fonction triplePointeur, on a donc un
pointeur pointeurSurNombre qui contient l'adresse de la variable nombre.
4.  Maintenant qu'on a un pointeur sur nombre, on peut modifier directement la variable nombre en mémoire ! Il suffit d'utiliser
*pointeurSurNombre pour désigner la variable nombre ! Pour l'exemple, on fait un simple test : on multiplie la variable nombre
par 3.
5.  De retour dans la fonction main, notre nombre vaut maintenant 15 car la fonction triplePointeur a modifié directement la valeur
de nombre.
Bien sûr, j'aurais pu faire un simple return comme on a appris à le faire dans le chapitre sur les fonctions. Mais l'intérêt là, c'est que de
cette manière en utilisant des pointeurs on peut modifier la valeur de plusieurs variables en mémoire (on peut donc "renvoyer plusieurs
valeurs"). On n'est plus limités à une seule valeur ! 
Quel est l'intérêt du coup d'utiliser un return dans une fonction si on peut se servir des pointeurs pour modifier des
valeurs ?
Ca dépendra de vous et de votre programme. C'est à vous de décider. Il faut savoir que les return sont bel et bien toujours utilisés en C.
Le plus souvent, on s'en sert pour renvoyer ce qu'on appelle un code d'erreur : la fonction renvoie 1 (vrai) si tout s'est bien passé, et 0
(faux) s'il y a eu une erreur pendant le déroulement de la fonction. 
Mais bon, on aura le temps de voir comment gérer les erreurs en C plus tard 
Une autre façon d'envoyer un pointeur à une fonction
VB.NET PDF File Compress Library: Compress reduce PDF size in vb.
Reduce image resources: Since images are usually or large size, images size reducing can help to reduce PDF file size effectively.
how to extract a picture from a pdf; extract images from pdf online
C# PDF File Compress Library: Compress reduce PDF size in C#.net
Reduce image resources: Since images are usually or large size, images size reducing can help to reduce PDF file size effectively.
extract image from pdf in; extract image from pdf acrobat
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 114 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
Dans le code source qu'on vient de voir, il n'y avait pas de pointeur dans la fonction main. Juste une variable nombre. Le seul pointeur
qu'il y avait vraiment était dans la fonction tripleNombre (de type long*). 
Il faut absolument que vous sachiez qu'il y a une autre façon d'écrire le code précédent, en ajoutant un pointeur dans la fonction main : 
Code : C
void triplePointeur(long *pointeurSurNombre);
int main(int argc, char *argv[])
{
long nombre = 5;
long *pointeur = &nombre; // pointeur prend l'adresse de nombre
triplePointeur(pointeur)// On envoie pointeur (l'adresse de nombre) à la fonction
printf("%ld", *pointeur)// On affiche la valeur de nombre, en tapant *pointeur
return 0;
}
void triplePointeur(long *pointeurSurNombre)
{
*pointeurSurNombre *= 3// On multiplie par 3 la valeur de la variable nombre
}
Pour que vous ayez les 2 codes sources côte à côte, je vous mets celui de tout à l'heure ci-dessous. Comparez-les bien, il y a de subtiles
différences et vous 
devez arriver à comprendre pourquoi il y a ces différences entre ces 2 codes sources. 
Code : C
void triplePointeur(long *pointeurSurNombre);
int main(int argc, char *argv[])
{
long nombre = 5;
triplePointeur(&nombre)// On envoie l'adresse de nombre à la fonction
printf("%ld", nombre)// On affiche la variable nombre. La fonction a directement
modifié la valeur de la variable car elle connaissait son adresse
return 0;
}
void triplePointeur(long *pointeurSurNombre)
{
*pointeurSurNombre *= 3// On multiplie par 3 la valeur de la variable nombre
}
Et le résultat dans les deux cas est le même : 
Code : Console
15
Ce qui compte, c'est d'envoyer l'adresse de la variable nombre à la fonction. Or, pointeur vaut l'adresse de la variable nombre, donc c'est
bon de ce côté ! On le fait juste d'une manière différente en créant un pointeur dans la fonction main. 
Dans le printf (et c'est juste pour l'exercice), j'affiche le contenu de la variable nombre en tapant *pointeur. Notez que j'aurais pu à la
place taper "nombre" : ça aurait été pareil car cela désigne la même chose dans la mémoire. 
J'ai mis des semaines avant de comprendre que ces 2 codes faisaient effectivement la même chose, mais d'une manière différente. Si
vous arrivez à comprendre ça, alors bravo, respect, bien joué, vous avez compris tout ce que je voulais vous enseigner sur les pointeurs 
Comme je vous le disais tout à l'heure, dans le programme "Plus ou Moins" nous avons utilisé des pointeurs sans vraiment savoir.
C'était en fait en appelant la fonction scanf. En effet, cette fonction a pour rôle de lire ce que l'utilisateur a rentré au clavier
et de renvoyer cela. 
Pour que la fonction puisse modifier directement le contenu de votre variable afin d'y mettre la valeur tapée au clavier, elle a
VB.NET PDF File Merge Library: Merge, append PDF files in vb.net
VB.NET Components to combine various scanned images to PDF, such as tiff, jpg, png, gif, bmp, etc. Append one PDF file to the end of another one in VB.NET.
extract images from pdf files; extract pdf pages to jpg
C# PDF File Merge Library: Merge, append PDF files in C#.net, ASP.
Combine scanned images to PDF, such as tiff, jpg, png, gif, bmp, etc. Merge Microsoft Office Word, Excel and PowerPoint data to PDF form. Append one PDF file to
pdf image extractor c#; extract pictures from pdf
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 115 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
besoin de l'adresse de la variable : 
Code : C
long nombre = 0;
scanf("%ld", &nombre);
La fonction travaille avec un pointeur sur la variable nombre, et peut ainsi modifier directement le contenu de nombre. 
Comme on vient de le voir, on pourrait créer un pointeur qu'on enverrait à la fonction scanf : 
Code : C
long nombre = 0;
long *pointeur = &nombre;
scanf("%ld", pointeur);
Attention à ne pas mettre le symbole & devant pointeur dans la fonction scanf ! Ici, pointeur contient lui-même l'adresse de la
variable nombre, pas besoin de mettre un & ! Si vous faisiez ça, vous enverriez l'adresse où se trouve le pointeur, et ça,
excusez mon langage, mais on s'en fout complètement 
Qui a dit : "Un problème bien ennuyeux" ?
Le chapitre est sur le point de s'achever, il est temps de retrouver notre fil rouge 
Si vous avez compris ce chapitre, vous devriez être capables de résoudre le problème maintenant. 
... 
Quoi qu'est-ce que vous attendez ? Allez au boulot tas d'feignasses ! 
... 
... 
Vous voulez la solution pour comparer ? La voici ! 
Code : C
void decoupeMinutes(long* pointeurHeures, long* pointeurMinutes);
int main(int argc, char *argv[])
{
long heures = 0, minutes = 90;
// On envoie l'adresse de heures et minutes
decoupeMinutes(&heures, &minutes);
// Cette fois, les valeurs ont été modifiées !
printf("%ld heures et %ld minutes", heures, minutes);
return 0;
}
void decoupeMinutes(long* pointeurHeures, long* pointeurMinutes)
{
/* Attention à ne pas oublier de mettre une étoile devant le nom
des pointeurs ! Comme ça, vous pouvez modifier la valeur des variables,
et non leur adresse ! Vous ne voudriez pas diviser des adresses
n'est-ce pas ? ;o) */
*pointeurHeures = *pointeurMinutes / 60;
*pointeurMinutes = *pointeurMinutes % 60; 
}
Résultat : 
Code : Console
1 heures et 30 minutes
Alors, c'est qui le plus fort ? 
VB.NET PDF Page Extract Library: copy, paste, cut PDF pages in vb.
Dim outputFilePath As String = Program.RootPath + "\\" 1.pdf" newDoc.Save( outputFilePath). VB.NET: Extract All Images from PDF Document.
extract image from pdf file; extract jpg from pdf
C# PDF File Split Library: Split, seperate PDF into multiple files
Application. Best and professional adobe PDF file splitting SDK for Visual Studio .NET. outputOps); Divide PDF File into Two Using C#.
extract pdf images; extract image from pdf using
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 116 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
Est-ce que j'ai besoin de vous expliquer encore une fois comment ça marche ? En théorie, mes explications précédentes devraient
suffire, je ne peux rien vous apprendre de nouveau. 
Mais bon allez, pour la forme, et parce que c'est un chapitre important, je vais me répéter encore une fois. Il paraît qu'en rabâchant les
mêmes choses ça finit par rentrer, si c'est le cas tant mieux pour vous 
Explications : 
1.  Les variables heures et minutes sont créées dans le main.
2.  On envoie à la fonction decoupeMinutes l'adresse de heures et minutes.
3.  La fonction decoupeMinutes récupère ces adresses dans des pointeurs appelés pointeurHeures et pointeurMinutes. Notez que, là
encore, le nom importe peu. J'aurais pu les appeler h et m, ou même encore heures et minutes (mais je ne veux pas que vous
risquiez de confondre avec les variables heures et minutes du main, qui ne sont pas les mêmes 
)
4.  La fonction decoupeMinutes modifie directement les valeurs des variables heures et minutes en mémoire car elle possède leurs
adresses dans des pointeurs. La seule contrainte, un peu gênante je dois le reconnaître, c'est qu'il faut impérativement mettre
une étoile devant le nom des pointeurs si on veut modifier la valeur de heures et minutes. Si on n'avait pas fait ça, on aurait
modifié l'adresse contenue dans les pointeurs, ce qui aurait servi... à rien 
De nombreux lecteurs m'ont fait remarquer qu'il était possible de résoudre le "problème" sans utiliser de pointeurs. Oui,
bien sûr que je sais que c'est possible, mais il faut contourner les règles que nous nous sommes fixées : on peut utiliser des
variables globales (bêrk), ou encore faire un printf dans la fonction (alors que c'est dans le main qu'on veut faire le printf !) 
Bref, si vous aussi vous trouvez un moyen de résoudre le problème autrement, vous emballez pas. Ce n'était qu'un exemple un
peu "théorique" pour vous montrer l'intérêt des pointeurs. Dans les prochains chapitres cet intérêt vous paraîtra de plus en plus
évident 
Comme le disait mon prof d'info : "Les pointeurs c'est bon, mangez-en" 
Moi, les premiers temps, ça m'a surtout donné une sacrée migraine 
Y'a pas de secret, pour bien comprendre les pointeurs, il faut pratiquer. 
Là encore les exemples étaient simples, mais bientôt nous ferons des programmes plus complexes (ne serait-ce que dans les prochains
chapitres) et il faudra savoir être patient. 
Si vous êtes comme moi, vous allez faire planter misérablement vos programmes. Et pas qu'une fois. Je vous l'ai dit, j'ai mis des mois à
acquérir ce que j'appelle "le réflexe des pointeurs". Pendant ce laps de temps, je mélangeais complètement *truc, &machin, truc,
machin... J'avançais à petits pas, en essayant de modifier 2-3 caractères par-ci par-là pour essayer de faire marcher mon programme et,
surtout, comprendre ce que je faisais. 
Aujourd'hui, j'arrive enfin à ne pas me planter trop lamentablement quand je programme. En général, je ne fais plus d'erreurs de base,
même si ça arrive à tout le monde hein, même aux meilleurs 
Quant à vous, je ne saurais trop vous conseiller de relire ce chapitre autant de fois que nécessaire et de faire des tests. Ne vous affolez
pas si les premiers temps vous n'y arrivez pas bien, vous savez désormais que c'est un phénomène complètement normal 
Petit résumé avant de se quitter
Les pointeurs ont un gros défaut : ils vous font mélanger plein de choses. Je le sais : dès que j'ai voulu apprendre à me servir des
pointeurs je confondais tout. 
Je ne peux pas vraiment éviter ça pour vous : il va falloir que vous repassiez ce chapitre encore et encore pour ne plus confondre. 
Ceci étant, un énième résumé avant de terminer le chapitre ne fera de mal à personne. 
Voici donc comment je résumerais les choses 
très simplement : 
En C, on peut créer 2 choses dans la mémoire : des variables et des pointeurs. 
Les variables : c'est avec elles que nous avons travaillé jusqu'ici. Créer une variable est très simple : il suffit d'indiquer le type de
la variable ainsi que son nom. 
Code : C
long maVariable = 0// Variable créée en mémoire (valeur mise à 0) 
Si on écrit &maVariable, on obtient l'adresse de la variable en mémoire 
Les pointeurs : ce sont des variables un peu particulières car elles prennent pour valeur 
l'adresse d'autres variables. Pour créer un
pointeur vide (qui ne contient l'adresse d'aucune variable), on fait ceci : 
Code : C
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 117 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
long *monPointeur = NULL; // Pointeur créé en mémoire (valeur mise à NULL (similaire à
0)) 
Un pointeur devient utile lorsqu'on lui donne pour valeur l'adresse d'une variable (par exemple &maVariable) : 
Code : C
long *monPointeur = &maVariable; // Le pointeur contiendra l'adresse de la variable 
On peut alors écrire *monPointeur : si on fait ça, ça sera exactement comme si on écrivait maVariable dans le code source (car
monPointeur contient l'adresse de maVariable) 
On peut donc écrire : 
Code : C
printf("%ld", *monPointeur);
... cela sera exactement comme si on avait écrit : 
Code : C
printf("%ld", maVariable);
Le résultat est exactement le même, sauf que dans le premier cas on passe par un pointeur pour accéder à la variable.
L'intérêt des pointeurs n'est pas évident. Au final, on en revient à écrire *monPointeur au lieu de maVariable tout court. Quelle perte de
temps hein ? 
Eh bien non, au contraire les pointeurs sont totalement indispensables en C : on l'a vu dans un petit exemple de ce chapitre (comment
modifier la valeur de plusieurs variables depuis une autre fonction), et on n'arrêtera pas de découvrir l'intérêt des pointeurs dans les
prochains chapitres. 
Soyez donc prêts avant de passer à la suite 
N'abandonnez pas ! Les pointeurs seront certainement votre plus gros obstacle dans votre apprentissage du C. Le reste sera plus facile je
vous le promets 
Les tableaux
Ce chapitre est vraiment la suite directe des pointeurs, et c'est un autre exemple de l'utilité des pointeurs. Vous comptiez y échapper ?
C'est raté 
Les pointeurs sont partout, je vous avais prévenus 
Dans ce chapitre, nous apprendrons à créer des variables de type "tableaux". Les tableaux sont très utilisés en C car ils sont vraiment
pratiques 
Nous commencerons dans un premier temps par quelques explications sur le fonctionnement des tableaux en mémoire (schémas à
l'appui). Croyez-moi, ces petites introductions sur la mémoire sont extrêmement importantes : elles vous permettent de comprendre
comment cela fonctionne. Un programmeur qui comprend ce qu'il fait, c'est quand même un peu plus rassurant pour la stabilité des
programmes non ? 
Les tableaux dans la mémoire
"Les tableaux sont une suite de variables de même type, situées dans un espace contigu en mémoire" 
Bon, je reconnais que ça fait un peu définition de dictionnaire tout ça 
Concrètement, il s'agit de "grosses variables" pouvant contenir plusieurs nombres du même type (long, int, char, double...) 
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 118 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
Un tableau a une dimension bien précise. Il peut occuper 2 cases, 3 cases, 10 cases, 150 cases, 2500 cases, c'est vous qui décidez. 
Ci-dessous, voici un schéma d'un tableau de 4 cases en mémoire qui commence à l'adresse 1600 : 
Lorsque vous demandez à créer un tableau de 4 cases en mémoire, votre programme demande à l'OS la permission d'utiliser 4 cases en
mémoire. Ces 4 cases doivent être contiguës, c'est-à-dire les unes à la suite des autres. 
Comme vous le voyez, les adresses se suivent : 1600, 1601, 1602, 1603. Il n'y a pas de "trou" au milieu. 
Enfin, chaque case du tableau contient un nombre du même type. Si le tableau est de type long, alors chaque case du tableau
contiendra un long. On ne peut pas faire de tableau contenant à la fois des long et des double par exemple. 
En résumé, voici ce qu'il faut retenir sur les tableaux : 
Lorsqu'un tableau est créé, il prend un espace contigu en mémoire : les cases sont les unes à la suite des autres.
Toutes les cases d'un tableau sont du même type. Ainsi, un tableau de int contiendra uniquement des int, et pas autre chose.
Définir un tableau
Pour commencer, nous allons voir comment définir un tableau de 4 long : 
Code : C
long tableau[4];
Voilà c'est tout 
Il suffit donc de rajouter entre crochets le nombre de cases que vous voulez mettre dans votre tableau. Il n'y a pas de limite (à part
peut-être la taille de votre mémoire 
). 
Maintenant, comment accéder à chaque case du tableau ? 
Il faut écrire tableau[numeroDeLaCase]. 
Très important : un tableau commence à l'indice n°0 ! Notre tableau de 4 long a donc les indices 0, 1, 2 et 3. 
Il n'y a pas
d'indice 4 ! C'est une source d'erreurs très courante, souvenez-vous en !
Si je veux mettre dans mon tableau les mêmes valeurs que celles indiquées dans mon schéma, je devrai donc faire : 
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 119 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
Code : C
long tableau[4];
tableau[0] = 10;
tableau[1] = 23;
tableau[2] = 505;
tableau[3] = 8;
Tu as dit qu'il y avait des pointeurs avec les tableaux. Où ça, je n'en vois pas ?
En fait, si vous écrivez juste "tableau", vous avez un pointeur. C'est un pointeur sur la première case du tableau. 
Faites le test : 
Code : C
long tableau[4];
printf("%ld", tableau);
Résultat, on voit l'adresse où se trouve tableau : 
Code : Console
1600
En revanche, si vous indiquez l'indice de la case du tableau entre crochets, vous obtenez la valeur : 
Code : C
long tableau[4];
printf("%ld", tableau[0]);
Code : Console
10
De même pour les autres indices. 
Notez que, comme tableau est un pointeur, on peut utiliser le symbole * pour connaître la première valeur : 
Code : C
long tableau[4];
printf("%ld", *tableau);
Code : Console
10
Il est aussi possible d'avoir la valeur de la seconde case en tapant *(tableau + 1) (adresse de tableau + 1). 
Les 2 lignes suivantes sont donc identiques : 
Code : C
tableau[1] // Renvoie la valeur contenue dans la seconde case (la première case étant 0)
*(tableau + 1) // Identique : renvoie la valeur contenue dans la seconde case 
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 120 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
Donc, quand vous écrivez tableau[0], vous demandez la valeur qui se trouve à l'adresse tableau + 0 cases (c'est-à-dire 1600). 
Si vous écrivez tableau[1], vous demandez la valeur se trouvant à l'adresse tableau + 1 case (c'est-à-dire 1601). 
Et ainsi de suite pour les autres valeurs 
Les tableaux à taille dynamique
Le langage C existe en plusieurs versions. 
Une version récente, appelée le C99, autorise la création de tableaux à taille dynamique, c'est-à-dire de tableaux dont la taille est
définie par une variable : 
Code : C
long taille = 5;
long tableau[taille];
Or, cela n'est pas forcément reconnu par tous les compilateurs, certains planteront sur la ligne n°2. 
Le langage C que je vous enseigne depuis le début (appelé le C89) n'autorise pas ce genre de choses. Nous considèrerons donc que faire
cela est interdit. 
Nous allons nous mettre d'accord sur la chose suivante : vous n'avez pas le droit de mettre une variable entre crochets pour la définition
de la taille du tableau, 
même si cette variable est une constante ! const long taille = 5; ne marchera donc pas mieux. 
Le tableau doit avoir une dimension fixe, c'est-à-dire que vous devez écrire noir sur blanc le nombre correspondant à la taille : 
Code : C
long tableau[5];
Mais... Alors il est interdit de créer un tableau en fonction de la taille d'une variable ?
Non rassurez-vous, c'est possible ! (même en C89 
Mais pour faire cela nous utiliserons une autre technique (plus sûre et qui marche partout) appelée l'allocation dynamique. Nous
verrons cela bien plus tard dans la partie II de ce cours.
Parcourir un tableau
Supposons que je veuille maintenant afficher les valeurs de chaque case du tableau. 
Je pourrais faire autant de printf qu'il n'y a de cases. Mais bon, c'est répétitif, un peu lourd, et imaginez le bazar si le tableau contenait
8000 nombres 
Le mieux c'est de se servir d'une boucle. Pourquoi pas d'une boucle for ? Les boucles for sont très pratiques pour parcourir un tableau : 
Code : C
int main(int argc, char *argv[])
{
long tableau[4], i = 0;
tableau[0] = 10;
tableau[1] = 23;
tableau[2] = 505;
tableau[3] = 8;
for (i = 0 ; i < 4 ; i++)
{
printf("%ld\n", tableau[i]);
}
return 0;
}
Documents you may be interested
Documents you may be interested