学习C – C结构体指针 以下代码定义了一个结构的指针: Dog *pDog = NULL; 这个声明一个指针pDog,它可以存储Dog类型结构的地址。 不要忘记Dog的typedef是省略struct关键字的必要条件。 没有typedef,你必须将语句写成: struct Dog *pDog = NULL; 您现在可以将pDog设置为具有结构地址的值: Dog aDog = { 3, 11, "name", "C", "C++"}; pDog = &aDog; 这里pDog指向aDog结构。 指针可以将前一个示例中的Dogs数组中的元素的地址存储起来: pDog = &my_Dogs[1]; 现在pDog指向结构my_Dogs [1]。 您可以通过指针来引用此结构的元素。 printf("The name is %s.\n", (*pDog).name); 你可以这样写上面的语句: printf("The name is %s.\n", pDog->name ); - > 被称为指向成员运算符的指针。 动态内存分配结构 Dog *pDogs[3]; 此语句声明了一个数组,指向Dog类型的结构的3个指针。 这个语句只分配了指针的内存。 您仍然必须分配存储所需的每个结构的实际成员所需的内存。 #include <stdio.h> #include <ctype.h> #include <stdlib.h> // For malloc() typedef struct Dog Dog; // Define Dog as a type name struct Dog // Structure type definition { int age; int height; char name[20]; char father[20]; char mother[20]; }; int main(void) { Dog *pDogs[3]; // Array of pointers to structure int hcount = 0; char test = "\0"; // Test value for ending...
学习C – C结构体示例 双向链接列表 双向列表可以通过任一方向列出。 除了指向下一个结构体的指针之外,我们还需要在每个结构体中添加一个额外的指针来存储先前结构体的地址。 #include <stdio.h> #include <ctype.h> #include <stdlib.h> typedef struct Dog Dog; // Define Dog as a type name struct Dog // Structure type definition { int age; int height; char name[20]; char father[20]; char mother[20]; Dog *next; // Pointer to next structure Dog *previous; // Pointer to previous structure }; int main(void) { Dog *first = NULL; // Pointer to first Dog Dog *current = NULL; // Pointer to current Dog Dog *last = NULL; // Pointer to previous Dog char test = "\0"; // Test value for ending input for( ; ; ) { printf_s("Do you want to enter details of a%s Dog (Y or N)? ", first != NULL?"nother" : ""); scanf_s(" %c",...
学习C – C函数范围 静态变量 静态变量可以保留从一个函数调用到的信息下一个。 您可以使用此声明声明一个静态变量 count : static int count = 0; 单词static是一个关键字。 单词static是一个关键字。… 被声明为静态的变量的初始化只发生一次,就在开头程序。 虽然静态变量仅在包含其声明的函数内可见,它本质上是一个全局变量。 以下代码显示了静态变量和自动变量之间的差异。 #include <stdio.h> // Function prototypes void test1(void); void test2(void); int main(void) { for(int i = 0 ; i < 5 ; ++i) { test1(); test2(); } return 0; } // Function test1 with an automatic variable void test1(void) { int count = 0; printf("test1 count = %d\n", ++count ); } // Function test2 with a static variable void test2(void) { static int count = 0; printf("test2 count = %d\n", ++count ); } 上面的代码生成以下结果。 在函数之间共享变量 为了在函数之间共享变量,在程序文件的开头声明一个变量所以他们“超出了功能的范围。 这些被称为全局变量,因为它们“可以随时随地访问。 #include <stdio.h> //w w w. jav a 2 s . c o m int count = 0; // Declare a global variable // Function prototypes void...
学习C – C字符类型 char类型的值占用所有数据类型的最小内存量。 它们通常只需要一个字节。 您可以通过字符常量为char类型的变量指定初始值。 字符常数可以只是单引号之间的字符。这里有些例子: char letter = "A"; char digit = "9"; char exclamation = "!"; 您可以使用一对单引号之间的转义序列来指定字符常量: char newline = "\n"; char tab = "\t"; char single_quote = "\""; 您也可以使用整数值初始化char类型的变量,只要该值适用于您的编译器的char类型的范围,如下例所示: char character = 74; // ASCII code for the letter J char类型的变量具有一种双重个性:您可以将其解释为字符或整数。 下面是一个值为char类型的算术运算的例子: char letter = "C"; // letter contains the decimal code value 67 letter = letter + 3;// letter now contains 70, which is "F" 因此,您可以对char类型的值执行算术,并将其视为字符。 字符输入和字符输出 您可以从键盘读取单个字符,并使用格式说明符%c的scanf()函数将其存储在char类型的变量中,例如: char ch = 0; scanf("%c", &ch); // Read one character 要使用printf()函数将单个字符写入命令行,请使用相同的格式说明符%c : printf("The character is %c\n", ch); 当然,也可以输出一个字符的数值: printf("The character is %c and the code value is %d\n", ch, ch); 该语句将以ch作为字符和数值输出值。 #include <stdio.h> int main(void) { char first = "A"; char second = 63; printf("The first example...
学习C – C常量 定义命名常量 PI是一个数学常数。我们可以将Pi定义为在编译期间要在程序中被其值替换的符号。 #include <stdio.h> #define PI 3.14159f // Definition of the symbol PI int main(void) { float radius = 0.0f; float diameter = 0.0f; float circumference = 0.0f; float area = 0.0f; printf("Input the diameter of a table:"); scanf("%f", &diameter); radius = diameter/2.0f; circumference = 2.0f*PI*radius; area = PI*radius*radius; printf("\nThe circumference is %.2f. ", circumference); printf("\nThe area is %.2f.\n", area); return 0; } 上面的代码生成以下结果。 注意 上面代码中的以下代码定义了PI的常量值。 #define PI 3.14159f // Definition of the symbol PI 这将PI定义为要由代码中的字符串3.14159f替换的符号。 在C编写标识符是一个常见的约定,它们以大写字母显示在#define指令中。 在引用PI的情况下,预处理器将替换您在#define伪指令中指定的字符串。 所有替换将在编译程序之前进行。 我们还可以将Pi定义为变量,但是要告诉编译器它的值是固定的,不能被更改。 当您使用关键字const为类型名称前缀时,可以修改任何变量的值。 例如: const float Pi = 3.14159f; // Defines the value of Pi as fixed 这样我们可以将PI定义为具有指定类型的常数数值。 Pi的关键字const导致编译器检查代码是否不尝试更改其值。 const 您可以在上一个示例的变体中使用一个常量变量: #include <stdio.h> int main(void) { float diameter = 0.0f; // The diameter of a table float radius =...