Einführung in die Nulladresse in C im Rahmen der Lehre des Programmierens mit C. [] (Nulladresse, Nullzeiger, Nullzeigerkonstante), Lektion, Seite 721366
https://www.purl.org/stefan_ram/pub/nulladresse_c (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C-Kurs

Die Nulladresse in C 

Nulladreßkonstanten

Das Literal »0« ist eine Nulladreßkonstante.

Initialisierungen und Zuweisungen

Ein Zeiger kann mit einer Nulladresse initialisiert werden. Einem Zeiger kann eine Nulladresse zugewiesen werden.

Der Zeiger enthält danach eine Nulladresse.

In dem folgenden Programm enthält der Zeiger »p« eine Nulladresse.

main.c
int main( void ){ int const * const p = 0; /**/ }

Auch in dem folgenden Programm enthält der Zeiger »p« eine Nulladresse.

main.c
int main( void ){ int const * p; p = 0; /**/ }

Wahrheitskontexte

Ein Adreßausdruck kann in einem Wahrheitskontext ausgewertet werden. Er ergibt genau dann „falsch“, wenn sein Wert die Nulladresse ist.

Die Adresse eines Objekts ist nie die Nulladresse.

main.c
#include <stdio.h>
int main( void )
{ int i = 27;
int const * p = 0;
int const * q = &i;
printf( "%sNull\n",( p ? "nicht " : "" ));
printf( "%sNull\n",( q ? "nicht " : "" )); }
stdout
Null
nicht Null
main.c
#include <stdio.h>
int main( void )
{ int i = 27;
int const * p = 0;
int const * q = &i;
printf( "%d\n", !p );
printf( "%d\n", !q ); }
stdout
1
0
main.c
#include <stdio.h>
int main( void )
{ int i = 27;
int const * p = 0;
int const * q = &i;
if( p )printf( "p\n" );
if( q )printf( "q\n" ); }
stdout
q
main.c
#include <stdio.h>
int main( void )
{ int i = 27;
int const * p = 0;
int const * q = &i;
while( p )printf( "p\n" );
while( q )printf( "q\n" ); }
stdout
q
q
q

Vergleiche

Eine Nulladresse kann mit anderen Adressen eines verträglichen Typs verglichen werden, das Ergebnis des Vergleichs ist 1 genau dann, wenn die andere Adresse eine Nulladresse ist.

main.c
#include <stdio.h>
int main( void )
{ int i = 27;
int const * p = 0;
int const * q = &i;
printf( "%d\n", p == p );
printf( "%d\n", p == q ); }
stdout
1
0
Quelle *
If a null pointer constant is converted to a pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function.”, C 2015, 6.3.2.3p3

Vergleiche mit der Nulladreßkonstanten

Eine Nulladreßkonstante kann mit Adressen verglichen werden, das Ergebnis des Vergleichs ist 1 genau dann, wenn die andere Adresse eine Nulladresse ist.

main.c
#include <stdio.h>
int main( void )
{ int i = 27;
int const * p = 0;
int const * q = &i;
printf( "%d\n", 0 == p );
printf( "%d\n", 0 == q ); }
stdout
1
0

Dereferenzierung

Die Nulladresse ist keine  Adresse eines Objektes. Sie hat keinen  Referenten. Daher darf sie nicht  dereferenziert werden.

main.c
#include <stdio.h>
int main( void )
{ int const * p = 0;
printf( "%d\n", *p ); }
→ Undefiniertes Verhalten

Eine Nulladresse darf nicht  dereferenziert werden.

Parameter ohne Nullsicherheit

So wie die Dereferenzierung einer Nulladresse zu undefiniertem Verhalten führt, kann auch die Übergabe einer Nulladresse als Argument zu undefiniertem Verhalten führen.

Wir nennen einen Parameter, bei dem der Wert 0 zu nicht  zu undefiniertem Verhalten führt, auch nullsicher. Einen Parameter, der nicht nullsicher ist, nennen wir auch nullunsicher. In Texten, die für die Allgemeinheit verständlich sein sollen, sind aber Ausdrücke wie „darf 0 sein“ oder „darf nicht 0 sein“ verständlicher.

Es sollte für Paramter stets dokumentiert werden, wenn einige Argumentwerte zu undefiniertem Verhalten führen.

main.c
#include <stdio.h>
/** @brief Gibt int-Referenten aus
@param p Adresse eines int-Referenten,
darf nicht 0 sein
@details Diese Funktion gibt den Referenten einer int-Adresse aus. */
void print( int const * const p )
{ printf( "%d\n", *p ); }
Dokumentation
void print( int const * const  p )
Gibt int-Referenten aus. Parameter
p Adresse eines int-Referenten, darf nicht 0 sein Diese Funktion gibt den Referenten einer int-Adresse aus.

Um die Dokumentation zu erzeugen (unter Windows ): 1.) Projektordner anlegen, 2.) Doxygen  aus Internet kopieren, 3.) Doxygen  mit »-g« aufrufen, um »Doxyfile« zu generieren, 3.) in »Doxyfile«: »EXTRACT_ALL = YES« und »OUTPUT_LANGUAGE = German« einstellen, 4.) Quelldatei »main.c« in Projektordner kopieren, 5.) Doxygen ohne »-g« aufrufen, um Dokumentation zu generieren, 6.) Datei »html\main_8c.html« in Web-Browser betrachten.

Damit die Programme kurz und übersichtlich bleiben wird in diesem Kurs Dokumentation zu Funktionen nicht immer geschrieben. In der Praxis sollten aber alle Funktionen eines Programm, das längere Zeit wartbar bleiben soll, dokumentiert sein.

Wenn Nullunsicherheit dokumentiert wurde, liegt die Verantwortung nun beim Benutzer der Funktion. Dieser ist nun dafür verantwortlich, daß die Funktion nicht mit »0« aufgerufen wird. Es gilt nicht  als Fehler einer Funktion, wenn ein Funktionsaufruf mit dem Argument »0« zu undefiniertem Verhalten führt, falls die Tatsache, daß dies so ist, dokumentiert wurde.

Parameter mit Nullsicherheit

Eine Funktion kann aber oft auch so geschrieben werden, daß sie auch dann definiertes Verhalten hat, wenn der Argumentwert »0« übergeben wird.

main.c
#include <stdio.h>
/** @brief Gibt int-Referenten aus
@param p Adresse eines int-Referenten
oder 0
@details Diese Funktion gibt den Referenten einer int-Adresse aus,
falls diese nicht 0 ist. */
void print( int const * const p )
{ if( p )printf( "%d\n", *p ); }

In diesem Fall kann die Funktion mit dem Argumentwert 0 aufgerufen werden, ohne undefiniertes Verhalten befürchten zu müssen.

Das folgende Programm zeigt nun den Aufruf einer Funktion mit dem Wert 0 für einen Adreßparameter.

main.c
#include <stdio.h>
void print( int const * const p )
{ if( p )printf( "%d\n", *p ); } int main( void )
{ int i = 27;
print( &i );
print( 0 ); }
stdout
27

Der Autor einer Funktion sollte das Verhalten einer Funktion für jeden möglichen Wert eines Parameters dokumentieren.

Die Nulladresse als Ergebnis

Eine Funktion, deren Rückgabetyp ein Adreßtyp ist, kann eine Nulladresse als Ergebnis zurückgeben.

Ob dies bei einer Funktion vorkommen kann, und was es dann bedeutet, hängt von der Funktion ab und muß durch die Dokumentation der Funktion beschrieben werden.

Beispielsweise könnte eine Funktion, die eigentlich eine Adresse eines Objekts zurückgeben soll, eine Nulladresse zurückgeben, wenn sie ihre Aufgabe aus irgendeinem Grund nicht erfüllen konnte. Der Aufrufer der Funktion kann dann daran erkennen, daß die aufgerufene Funktion ihre Aufgabe nicht erfüllen konnte.

main.c
#include <stdio.h>
/** @brief Gibt den Wert des Arguments zurück.
@param p Ein int-Zeiger, der auch eine Nulladresse sein darf.
@return Gibt den Wert des Arguments zurück, bei dem es sich
auch um eine Nulladresse handeln kann. Die Rückgabe einer
Nulladresse bedeutet, daß diese Funktion mit einer Nulladresse
als Argumentwert aufgerufen wurde. */
int * f( int * const p ){ return p; }
int * g( int * const p ){ return 0; }
int main( void )
{ int i = 27;
puts( f( &i )? "1" : "0" );
puts( f( 0 )? "1" : "0" );
puts( g( &i )? "1" : "0" ); }
stdout
1
0
0

Der Autor einer Funktion sollte dokumentieren, ob eine Funktion eine Nulladresse zurückgeben kann, und was dies dann bedeutet.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram721366 stefan_ram:721366 Nulladresse, Nullzeiger, Nullzeigerkonstante source, source code,sourcecode, Programmier sprache C, C, Programm, Programme, C-Programm C Sprache C Programmiersprache C C-Programme, Programmieren in C, Die Programmiersprache C, Die Programmier-Sprache C, C-Programmierung, Die Programmier Sprache C, ANSI-C, Standard C, ISO-C, International Standard ISO/IEC 9899:1999 (E), ANSI X3.159-1989, C90, C99, ANSI/ISO-C, ISO/IEC-C, IEC-C, ISO/IEC 9899:1999 (E), Standard C programmieren, Standart C programmieren, INCITS/ISO/IEC 9899-1999, Programming Languages - C (formerly ANSI/ISO/IEC 9899-1999) , Einführung, Einfuehrung, Einführungen, Einfuehrungen, eLearning-Modul, e-Learning-Modul, eLearning-Module, e-Learning-Module, Kurs Berlin, Kurse Berlin, Kursus, Vortrag, Vorträge, Vortraege, Lehrgang, Lehrgänge, Lehrgaenge, kostenloses Lehrmaterial, kostenlose Lehrmaterialien, Vorlesung, Vorlesungen, Unterrichtseinheit, Unterrichtseinheiten, kostenloses Unterrichtsmaterial im Internet, kostenlose Unterrichtsmaterialien im Internet, Ausbildung, Ausbildungen, für die Ausbildung, Fortbildung, Fortbildungen, Weiterbildung, Weiterbildungen, Schulung Berlin, Schulungen Berlin, Internetschulung, Webschulung, Kursunterlage, Kursunterlagen, trainer Berlin, Didaktik, Informatikunterricht, Primer, Skript FH, Skripte FH, Skriptum FH, Skripts FH, Script FH, Scripte FH, Scriptum FH, Scripts FH, howto, how-to, how to, Lehrbuch, Buch, Bücher, Buecher, Bericht, Crash Kurs Berlin, Crash-Kurs Berlin, Crashkurs Berlin, Report, Sachtext, Sachtexte, Übung, Übungen, Uebung, Uebungen, course, PbclevtugFgrsnaEnz, lecture note, lecture notes, Tutorial, Tutor, Tutorium, Teacher, Lehrer Berlin, Trainer Berlin, Beratung Berlin, Anleitung zum, Anleitungen zum, Einführung, Einfuehrung, Einführungen, Einfuehrungen, Handbuch für, Handbücher, Handbuecher, Support, Diplomarbeit, Facharbeit, Hausarbeit, Hausarbeiten, Werk, Werke, Text, Übungsblatt, Uebungsblatt, Lösung, Loesung, Lösungen, Loesungen, Auflösung, Aufloesung, Auflösungen, Aufloesungen, Facharbeit, Facharbeiten, Forum, Training, manual, Folie, Folien, Lehrmittel, beratung, Definition von, Allgemeine Erklärung, Allgemeine Erklaerung, Allgemeine Erklärungen, Allgemeine Erklaerung, Allgemeine Erklaerungen, Einfache Erklärung einfach, Einfache Erklaerung einfach, Einfache Erklärungen, Einfache Erklaerung, Einfache Erklaerungen, zum Thema, FAQ, FAQs, Konzept, Lernkurs, Lern-Kurs, Lernkurse, Lern-Kurse, eine kurze Erklärung, Begriff, Begriffe, Erklärung zu Begriffen, begriffbestimmung, begriffbestimmung, Begriffsbestimmung, Begriffserklärung, Begriffserklaerung, Wort, Worterklärung, Worterklaerung, Definition, Beispiel, Beispiele, Bedeutung, Bedeutungen, was bedeutet, Begriffsdefinition, für Anfänger, fuer Anfaenger, für Einsteiger, für Beginner, zum selber Lernen, handout, hand out, web based training, WBT, Net Based Training, NBT, computer based training, CBT, virtual learning environment, virtual university, für die Schule, Seminar, Seminare, Vorgehensweise, Pädagogik, Paedagogik, Akademie, Onlineacademie, Onlineakademie, Wissen, Unterrichtsvorbereitung für das Fach, Unterricht, für Lehrer, für Lehrerinnen, Referat, Referate, Hausaufgabe, Hausaufgaben, Tip, Tipp. Tipps und Tricks, Tips und Tricks, Methode, Methoden, Methodik, Funktion, Funktionsweise, Aufbau, Prinzip, Grundlage, Grundlagen, Internetschulung, Unterlage, Unterlagen, Struktur, Frage, Fragen, Antwort, Antworten, Schulunterricht, zum erlernen, was ist das?, wie?, lerne, Onlineausbildung, Onlinelehrgang, Onlinekurs, Onlinebuch, Webbuch, Academy, Fachhochschule, FH, TFH, Hochschule, Universität, Universitaet, Uni, Schule, Berufsschule, Gymnasium, Erste Schritte mit, Dozent, Dozenten, Zusammenfassung, Übersicht, Term, Fachwort, Fachbegriff, Fachbegriffe, Grundbegriff, Grundbegriffe, Lektion, Lektionen, Bedienungsanleitung, Bedienungsanleitungen, Spezialist, Spezialisten, Coaching, Coach, Fachbuch, technologie, Unterschied zwischen, Unterschiede zwischen, lehren, unterrichten, für das Studium, für Studenten, für Studentinnen, für Studierende, für Schüler, für Schülerinnen, Wie kann ich, Wie kann man, Hilfe, selber, erstellen, Erstellung, Beginner, Online-Seminar, Online-Kurs, Online-Schulung, ich, gebrauchsanweisung, gebrauchsanleitung, Bedienungsanweisung, Einweisung, Kurzinfo, Internet-Kurs, Internet-Kurse, Online-Training, Intensiv, Intensivkurs, Vortragsreihe, Präsentation, Grundzüge, Mitschrift, Mitschriften, Verständnis, verstehen, anwenden, Hintergrundwissen, Hintergrund, Hintergründe, content, Funktionsprinzip, Schritt für Schritt; E-Learning; elearning; online learning; Fernlehre, Fernlehrgang, Fernlehrgänge, Referent, Referenten, Fernkurs, Fernkurse, Fernstudium, Fernschule, Fernuniversität, Fernlehrer, Denken, Qualifizierungsmaßnahme, Qualifizierung, Qualifizierungen, Volkshochschulkurs, Volkshochschulkurse, Internet-Learning-Plattform, Online-Learning-Plattform, E-Learning-Plattform, Internetlearning-Plattform, Onlinelearning-Plattform, Elearning-Plattform, jetzt, Kochbuch, einfach erklärt, Kenntnis, Kenntniss, Kenntnisse, deutsche Hilfe, lernen und verstehen; blended learning; courseware, Profi, Profis, professionell, professionelle, professionelles, profesionell, profesionelle, profesionelles, professionel, gekonnt, für Könner, Grundkurs, Leistungskurs, Aufbaukurs, Lehrtext, Lehrtexte, Fachtext, Fachtexte, Ausarbeitung, distance learning, Online Seminar, distance education, Online Tutorium, Online Tutorien, technology-based learning, Computer based learning, CBL, Internet Based learning, IBL, Web based learning, WBL, online-learning, OL, online-training, OT, CAI, Computer Assisted Instruction, CUU, Computerunterstützter Unterricht, Computer-unterstützter Unterricht, Know how, Grundkenntnis, Grundkenntnisse, Kompetenz, Schulungsunterlagen, Insiderwissen, Rat, Lehrerinnen und Lehrer, ABC, Überblick, Arbeitsblatt, Sekundarstufe, Oberstufe, Material, Materialien, Unterrichtsentwurf, Unterrichtsentwürfe, Lerntip, Lerntips, Lerntipp, Lerntipps, ebook, schnell lernen, Lerner, Lernender, Lernende Erwachsenenbildung, Frage und Antwort, Selbststudium, Selbstudium, Umschulung, , kostenlos, kostenlose, kostenloses, kosten los, kosten lose, kosten loses, gratis, free, frei, freie, freies, privat, private, privates, homepage, home-page, home page, website, web site, webpage, web-page, web page, webpages, web-pages, web pages, webseite, Web-Seite, Webseite, Webseiten, Web-Artikel, Web Artikel, online, on-line, on line, download downloaden, down load, or, deutsch, deutsche, deutsches, deutscher, Deutschland, deutschsprachig, deutschsprachige, deutschsprachiges, german, germany, and, uebersicht, Uerbersicht, uebersichten, Uebersichten, Übersicht, übersicht, Übersichten, übersichten, Uebersicht, uebersicht, Uebersichten, uebersichten, Info, Infos zu, Information über, ueber, Informationen über, Auskunft, Auskünfte, Auskuenfte, Dienst, PbclevtugFgrsnaEnz, Angebot, Angebote, Anbieter, server, für, fuer, in, an, keyword, keywords, key word, keywords, internet, internets, net, network, net work, networks, net works, web, www, world wide web, Theorie, Praxis, Anwendung, DV, IT, glossar, fachwörterbuch it-glossar, computer lexikon, Computerlexikon, Computer-Lexikon, Lexikon, computer lexicon, Computerlexicon, Computer-Lexicon, Lexicon, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 was ist ein, was ist das, was sind, definiere, definition, define, Inhalt, html, xhtml, free im netz, PDF Text, digital, digitale, binär, binäre, elektronisch, elektronische, fachbegriff, fachbegriffe, konzept, Begriff, allgemein, allgemeine, allgemeines, Technik, Datentechnik, Digitaltechnik, Binätechnik, online lesen; , Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd721366, slrprddef721366, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/nulladresse_c