„Lernen Sie die C-Sprache jeden Tag in einer Minute·10“ Zweidimensionale Arrays und zweidimensionale Zeiger, Beurteilung der Groß-/Kleinschreibung von Zeichen, der Unterschied zwischen char arr[] und char * arr usw.

1、

int a[5] = {
    
    1,2,3,4,5};
//&a+1为第二批int a[5]的第一个元素地址的地址,相当于{1,2,3,4,5,  x1, x2,x3,x4,x5} *(&a+1) == &x1

int b[2][3] = {
    
    {
    
    1,2,3}, {
    
    4,5,6}};
//&b+1为第二批b[2][3]的第一块元素地址的地址,相当于{
    
    {1,2,3},{4,5,6},{x1,x2,x3},{y1,y2,}} *(&b+1) == &b[2]

2.
(1) scanf(“%d%d…“, &i,&j,…) Rückgabewert: Gibt so viele zurück, wie erfolgreich gelesen werden können. Wenn beispielsweise i und j gelesen werden können, geben Sie 2 und keines davon
zurück
wurden gelesen. Geben Sie ein, um 0 zurückzugeben, lesen Sie bis zum Ende der Datei oder drücken Sie STRG+Z, um zu EOF
(2) zurückzukehren.

while(scanf(%d”, &i) != 1)  //如果输入非整数输入的东西不能被scanf接收
	scanf(%*s”);       //输入留在缓冲区一直循环,加入scanf(“%*s”)
                           //用于接收缓冲区的字符串数据清空缓冲区

3.
(1) int a[][2]; //a ist die Adresse, die auf das erste Element zeigt. Das erste Element ist ein Array mit zwei Ints, also ist a ein Zeiger auf ein Array mit zwei Ints. Sie können Geschrieben werden as int (*a)[2] == int[2] (*a)
Einfach ausgedrückt: a ist ein Zeiger, der auf die Adresse zeigt, die zwei Int-Arrays
(2) enthält, und p in int ** p zeigt auf die Adresse. Der Zeiger
kann nicht p=a sein; die beiden sind nicht dasselbe Konzept
(3) int * b[2]; // Definieren Sie ein Zeigerarray, jedes Element in b ist ein int *, das die Adresse ist, und b ist das erste Elementadresse, also ist b ein Zeiger auf die Adresse, p = b; kein Problem

4.
#include<ctype.h>Header-Datei
isalpha() //Beurteilen Sie, ob ein Zeichen ein Buchstabe ist, geben Sie ungleich 0 zurück, wenn ja, geben Sie 0 zurück, wenn nicht.
isdigit() //Beurteilen Sie, ob ein Zeichen eine Zahl ist, geben Sie nicht zurück -0 wenn ja, gib nein 0 zurück
isslower() //Beurteile, ob ein Zeichen ein Kleinbuchstabe ist, gib ungleich 0 zurück, wenn ja, gib 0 zurück, wenn nicht
issupper() //Beurteile, ob ein Zeichen ein Großbuchstabe ist, gib ungleich zurück 0, wenn ja, 0 zurückgeben, wenn nicht
ispunct() //Beurteilt, ob das Zeichen ein Satzzeichen ist, gibt ungleich 0 zurück, wenn ja, gibt 0 zurück, wenn nicht
isspace()//Beurteilt, ob ein Zeichen ein Leerzeichen ist (Leerzeichen, Zeilenvorschub, Seitenvorschub, Wagenrücklauf, Tab), gibt ungleich 0 zurück, wenn ja, gibt 0 zurück, wenn nicht
tolower( ) //Das Parameterzeichen ist Großbuchstabe, Rückgabe Kleinbuchstabe, andernfalls wird der ursprüngliche Parameter zurückgegeben
tosupper() //Das Parameterzeichen Ist Kleinbuchstabe, wird Großbuchstabe zurückgegeben, andernfalls wird der ursprüngliche Parameter zurückgegeben

5.
getchar() //Bis zum Ende der Datei lesen oder STRG+Z drücken, um zu EOF zurückzukehren

6.
Neues Feature-Initialisierungsarray
int a[] = {1, [3] = 20}; //1,0,0,20
int a[] ={1, [0]= 5, 3}; //5 ,3

7.
Der Unterschied zwischen char arr[] und char * arr

char arr[] = “hello”;
char * arr = “hello”;

Der Name des ersten Programmarrays ist eine Zeigerkonstante und kann nicht geändert werden, aber der Inhalt kann geändert werden. Zuerst öffnet char arr[] einen Speicherplatz auf dem Stapel, und dann wird die Zeichenfolgenkonstante kopiert und gespeichert Es befindet sich in diesem Speicherplatz. Der Inhalt des Speicherplatzes ist lesbar und beschreibbar.
Die zweite besteht darin, arr direkt eine Adresse des String-Konstantenbereichs zuzuweisen. Wenn der Inhalt über arr geändert wird, entspricht dies der Änderung des Inhalts von String-Konstantenbereich. Das ist falsch. String-Konstante Die Zone erlaubt nur Lesen und kein Schreiben.

char arr[10];
char *p = “hello”;
char *q = arr;
fgets(p, 5, stdin); //error 在p指向的地址写入字符串,因p指向字符串常量区地址,可读但不可写
fgets(q, 5, stdin); //q指向arr地址,因arr是从栈中开辟的空间,可读可写,故在地址上写入字符串是对的

8.
NULL-Bedeutung
: NULL bedeutet 0, aber nicht die Zahl 0, sondern die Adresszahl ist 0. Eine Adresszahl von 0 kann nichts speichern. Int *p = NULL; *p = 5; ist falsch.

9、

void f(int * p)
{
    
    
	P = (int *)malloc(4);
}

void main()
{
    
    
	int * i = NULL;
	f(i); 
}

Es ist falsch, i über eine Funktion Speicherplatz zuzuweisen. Da p und i zwei unabhängige Personen sind, weisen Sie i zuerst p zu, dann zeigt p auf die Adresse von i, die NULL ist, und weisen Sie dann über die Funktion Speicher für P zu. Zu diesem Zeitpunkt zeigt p nicht mehr auf die Adresse von i, leitet aber zu einer zugewiesenen Adresse um. Die Adresse des Speicherplatzes i ist immer noch NULL

10.
Der Typ size_t ist der Typ, der vom Operator sizeof zurückgegeben wird. C legt fest, dass der Operator sizeof einen ganzzahligen Typ zurückgibt, gibt jedoch nicht an, um welchen ganzzahligen Typ es sich handelt. Er kann unsigned int unsigned long sein

Fügen Sie hier eine Bildbeschreibung ein

Supongo que te gusta

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