„Lernen Sie die C-Sprache jeden Tag in einer Minute·8“ Strings, Zeiger und zweidimensionale Arrays, Komplementcodes, bitweise Negation

1.
Aufzählung

enum WeekDay  //这是一个数据类型
{
    
    
	//MonDay, TusDay,....
};
enum WeekDay day = MonDay;
printf(%d\n”, day); //输出0,枚举里面元素都是从0开始排列

2.
String
(1) Es muss ein Backslash stehen, bevor doppelte Anführungszeichen in den String eingefügt werden
(2) %p ist die Druckadresse, %u gibt vorzeichenlose Dezimalzahlen aus, -123 gibt Komplement aus 4294967173
%8.3f //rechtsbündig, Die Breite ist 8, behalten Sie drei Dezimalstellen bei, wenn die Breite weniger als 8 ist, füllen Sie sie mit 0 oder Leerzeichen, und ein negatives Vorzeichen zeigt die linke Ausrichtung an
(3) const char m[10] = "helloworld"; //const vorne bedeutet, dass der Wert nicht geändert werden kann
const char * pst = "helloworld"; //Der Wert kann nicht geändert werden, aber die PST-Adresse kann geändert werden
char * const pst = "helloworld"; //Die Adresse kann nicht geändert werden, aber die Wert kann geändert werden
char const * pst = "helloworld"; / /Der Wert kann nicht geändert werden und die Adresse ist variabel.
Zusammenfassend lässt sich sagen: Der Wert von const auf der linken Seite von * kann nicht geändert werden und die Adresse von const auf der rechten Seite von * kann nicht geändert werden
. (4) Standardmäßig befindet sich am Ende der Zeichenfolge ein Nullzeichen „\0“, z. B. char * name = "huang"; // Die Gesamtzahl der Bytes beträgt 6
(5) char [10] = {'a', 'b', 'c', '\0'}; //Mit leerer Zeichentabellenzeichenfolge, ohne leeres Zeichentabellenzeichenarray (
6) char * name = " helloworld"; // Entspricht char name[] = "helloworld"; Es ist zu beachten, dass die durch das Array definierte Zeichenfolge geändert werden kann, die durch den Zeiger definierte Zeichenfolge jedoch nicht geändert werden kann (
7) arr ist ein Array Der Name ist auch die Adresse des ersten Elements, arr + 1 stellt die Adresse des zweiten Elements dar, aber arr ist eine Zeigerkonstante, ein nicht veränderbarer Wert, andernfalls wird der Speicherort des Arrays, dh die Adresse, geändert Die automatische Inkrementierungsoperation von ++arr ist nicht zulässig. Dies kann nur für veränderbare L-Werte verwendet werden. Wenn es sich um eine durch einen Zeiger definierte Zeichenfolge handelt, kann die Adresse geändert und erhöht werden, z. B. char * name = "huang"; //name++ bedeutet, auf die nächste Elementadresse zu zeigen
(8) Definieren Sie das Zeichenarray, um eine Adresse zu öffnen Platz im Speicher, und legen Sie die Zeichen ab. Die Zeichenfolge wird gespeichert, und der Zeiger definiert die Zeichenfolge, indem er dem Zeiger die Zeichenfolgenadresse zuweist, sodass sich die Array-Adresse des ersteren von der Zeichenfolgenadresse und die Adresse des letzteren unterscheidet ist dasselbe. ( 9 ) Addieren von Adresse und
Ganzzahl = Ganzzahl ) puts(name) //Die Ausgabezeichenfolge endet, wenn sie auf „\0“ trifft, und die Zeile wird automatisch umbrochen gets(name) //Eingabezeichenfolge, absorbieren \n und konvertieren es in \0 Zeichen fgets(name, 5, stdin); // Kehren Sie zur ersten Zeichenadresse zurück, geben Sie hu ein, und was im Namen gespeichert wird, ist hu\n\0\0 Geben Sie huan ein, speichern Sie huan\0 Geben Sie huanghua ein, speichern Sie huan\0 fputs(name, stdout); //Die Ausgabezeichenfolge endet mit \0 und wird nicht automatisch umgebrochen (11) strlen(name); //Berechnen Sie die Länge der Zeichenfolge, ohne \0 strcat(str1 , str2); //Fügen Sie die Zeichenfolge str2 bis zum Ende zusammen von str1, um eine neue Zeichenfolge str1 zu bilden, und am Ende automatisch \0 hinzufügen (Hinweis: Die str2-Zeichenfolge wird gespleißt, wenn das Nullzeichen der str1-Zeichenfolge erkannt wird, und wird in eine neue Zeichenfolge gespleißt Der Inhalt wird in den Speicherbereich kopiert, auf den str1 zeigt, und der Inhalt wird kopiert, nicht die Adresse.) strncat(str1, str2,5); // Die ersten fünf Zeichen in str2 werden an die Rückseite von str1 angefügt, um sie zu bilden ein neuer str1 und am Ende wird automatisch \0 hinzugefügt strcmp(str1 , str2); // Vergleichen Sie die ASCII-Codewerte zweier Zeichenfolgen von links nach rechts. Wenn gleich, geben Sie 0 zurück, str1>str2 gibt eine positive Ganzzahl zurück , str2>str1 gibt eine negative Ganzzahl zurück strncmp(str1, str2, 5); //Zwei Zeichenfolgen vergleichen Die ersten fünf Zeichen strcpy(str1, str2); //Kopieren Sie die Zeichenfolge str2 nach str1, um eine neue str1 zu bilden. Was kopiert wird ist der String-Inhalt, nicht die Adresse. strncpy(str1, str2, 5); //Str2 nach vorne kopieren 5 Zeichen werden nach str1 kopiert (12) getchar() empfängt ein Zeichen und gibt zurück, kein Zeichen gibt -1 oder EOF zurück putchar('S'); gibt ein Zeichen aus (13) atoi(str) //wandelt die Zeichenfolge in eine Ganzzahlausgabe um, z. B. int i = atoi("22"); //i ist die 22-Ganzzahl itoa(i) / /Konvertieren Sie die Ganzzahl in eine Zeichenfolgenausgabe, z. B. char * p = itoa(22); //Ausgabezeichenfolge 22 atof() //Konvertieren Sie eine numerische Zeichenfolge in einen Double-Typ, z. B. double b = atof("23.4"); / /Output 23.4 ftoa() //Gleitkommatyp in String, char * p = ftoa(23.4) ; //String ausgeben 23.4 atol() //String in Long-Typ konvertieren, long a = atol("23"); / /Long-Typ 23 ausgeben Hinweis: Die maximale Zahl, die nur konvertiert werden kann, ist 2147483648. Wenn Sie größere Werte konvertieren möchten, ist atoll erforderlich ltoa()//Long-Typ in String konvertieren, char *p = ltoa(23); // Ausgabezeichenfolge 23 (14) sprintf(str, „%d, %s“, 2, „huanghua“); // Die Zeichenfolge str speichert 2,huanghua (15)%.5s //Bis zu fünf Zeichen ausgeben, %5s //Mindestens fünf Zeichen ausgeben, nicht genügend Leerzeichen zum Ausfüllen (16) fscanf(fp, „%d %d %s ", &i, &j, str); //Daten aus dem fp-Dateizeiger auf i, j, lesen str. Der dritte Block ist die Eingabeliste fprintf(fp, "%d %d %s", i, j, str); //Schreiben Sie den Inhalt von i, j, str in die fp-Zeigerdatei und den dritten Block ist die Ausgabeliste (17) char * strchr(const char *s, int c) //Wenn die s-Zeichenfolge das Zeichen c enthält, gibt die Funktion einen Zeiger auf das erste Vorkommen des c-Zeichens in der s-Zeichenfolge zurück (das Nullzeichen an der Stelle). Ende ist ebenfalls Teil der Zeichenfolge, liegt also im Suchbereich.) Wenn das c-Zeichen nicht gefunden wird, wird NULL zurückgegeben.



























(18) char *strpbrk(const char *s1, const char *s2) //Wenn der s1-String irgendwelche Zeichen des s2-Strings enthält, gibt die Funktion einen Zeiger auf die erste Position des s1-Strings zurück, andernfalls gibt sie NULL zurück
( 19) char * strrchr(const char *s, int c) //Die Funktion gibt den Positionszeiger des letzten Vorkommens des c-Zeichens in der s-Zeichenfolge zurück (das letzte Nullzeichen liegt auch im Suchbereich), wenn das c Wenn das Zeichen nicht gefunden wird, wird NULL
(20) zurückgegeben ist zurück gekommen.

3.
Zeiger und zweidimensionale Arrays
int a[4][2]; //Das a-Array hat 4 große Elemente und jedes große Element hat 2 kleine Elemente.
(1) a ist die Adresse des ersten großen Elements, das heißt a == &a[0]
(2) a[0] ist das erste große Element, das als b betrachtet werden kann, dann als b[0], b [1] sind das erste bzw. zweite Element in diesem großen Elementarray, dann ist a[0] die Adresse des ersten Elements im großen Element, d. h. a[0] == &a[0][0]
( 3) *a == a[0], ** a == a[0][0]
(4) int (* p)[2] == int [][2] //Dies ist eine Zeichenfolge ähnlich eine Zeigerdefinition, char * p = "huang"; Äquivalent zu char p[] = "huang"
(5) Int * p[2]; // Definieren Sie ein Array vom Typ int * mit zwei Elementen, jedes Element ist int * Type
(6) a[m][n] == * ( *(a+m)+n)
(7) typedef int arr[4]; //Machen Sie arr zu einem neuen Datentyp, der vier Daten vom Typ Int enthält. Definieren Sie dann die Variable arr a; entspricht int a[4]; typedef arr pst[3]; // Machen Sie pst zu einem neuen Datentyp, der drei Daten vom Typ arr enthält. Definieren Sie dann die Variable pst p; entspricht int pst[3][4];
erinnern Sie sich an ein paar Worte zu Zeigern:
char *p; char *q;
(1) Weisen Sie die Adresse p = q zu;
1. Ändern Sie die in value gespeicherte Adresse , ändert sich auch der an einer anderen Adresse gespeicherte Wert, da sie alle auf dieselbe Adresse verweisen.
2, p und q sind zwei unabhängige Individuen. Sie stören sich nicht gegenseitig, nachdem die Adressen zugewiesen wurden. Wenn Sie den Wert von p ändern, wird dies der Fall sein hat keinen Einfluss auf q. Das Ändern von q Der Wert hat keinen Einfluss auf p. Zum Beispiel ist p = q = 1001H, wenn q = 1002H, dann ist p immer noch 1001H.
(2) Die Adresse der zugewiesenen Adresse &p = &q;
1. Wenn die in der Adresse gespeicherte Adresse geändert wird, ändert sich auch die andere Adresse, da es sich bei allen um Adressen handelt, die auf dieselbe Adresse verweisen.
2. &p und &q sind zwei unabhängige Personen. Sie stören sich nicht gegenseitig, nachdem die Adressen zugewiesen wurden. Eine Änderung des Werts von &q hat keine Auswirkungen auf &p, und eine Änderung des Werts von &p hat keine Auswirkungen auf &q. Beispiel: &p = &q = 1001H, wenn &q = 1002H, dann ist &p immer noch 1001H.

4、

int a[10];
int * p = a;
* ++p == p[1]
++ *p == p[0]+1
*p++ //先取*p值,然后p指向下一个元素地址
*p+=2 //*p = *p+2

5.
Komplementcode
. Der Komplementcode einer positiven Zahl ist er selbst.
Der Komplementcode einer negativen Zahl wie dem Komplement von -3:
3 bis binär 0011
negiert +1. 1101
ist ein Int-Typ, da 28 Einsen davor stehen
. - Das 3er-Komplement im Hexadezimalformat lautet: fffffffd

Finden Sie den Originalcode mithilfe des Komplementcodes: fffffffd
negiert +1 0011 und
fügt 3 ein negatives Vorzeichen hinzu, um -3 zu erhalten

Wenn es negativ ist, hängt es davon ab, ob das höchste Bit 0 oder 1
Zeichen ist (8 Bits in 1 Byte, ob das achte Bit 0 oder 1 ist) -128 (80) - +127 (7F)
kurz (2 Bytes) - 32768 (8000) ——+32767 (7FFF)
int (4 Bytes) -2147483648 (80000000) ——+2147483647 (7FFFFFFF)

Bitweise Negation ~
~ Der Wert von
9 ist 1001, wobei die vorherigen 28 Nullen weggelassen werden.
~ 9 ist 0110 und die vorherigen 28 Einsen weggelassen. Zu diesem Zeitpunkt ist das höchste Bit 1, was zeigt, dass der ursprüngliche Code eine negative
Zahl ist. Negativ +1 ist 1010, also 10
plus eins. Das negative Vorzeichen ist -10

Bitweise Linksverschiebung <<
8<<3. Der Wert
8 ist 1000. Verschieben Sie um drei Bits nach links und addieren Sie auf der rechten Seite 0 zu 0100 0000, also 64.

6.
Ein Symbol wird ausgewertet und zwei Symbole werden verwendet, um wahr oder falsch zu bestimmen.
4&6 == 4
4&&6 ==1 ist wahr
! 4 == 0 ist falsch.

Fügen Sie hier eine Bildbeschreibung ein

Supongo que te gusta

Origin blog.csdn.net/cs1395293598/article/details/135172843
Recomendado
Clasificación