C语言教程 第32页

C 指针-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

C 指针

学习C – C指针 指针指向另一个值的内存地址。 指针引用内存中的位置,并获取存储在该位置的值称为取消引用指针(来源:http://en.wikipedia.org/wiki/Pointer_(computer_programming))。 看下面的语句: int number = 5; 分配一个内存位置来存储值为5的整数,您可以使用名称编号访问它。 值5存储在该区域中。 计算机使用地址引用该区域。 假设地址是101。我们可以说把价值5放入房间号101; 可以存储地址的变量称为指针。 下面的代码定义了一个指针 number 其中包含另一个变量的地址,称为number,它是一个包含值5的整数变量。 存储在数字中的值是地址的第一个字节数。 字指针用于仅指一个地址。 int number = 5; int *pnumber = &number; 指向char类型的值的指针指向占用1个字节的值,而指针到类型long的值通常指向占用4个字节的值的第一个字节。 每个指针将与特定的变量类型相关联,并且它只能用于指向该类型的变量。 因此,类型“指向int的指针”的指针只能指向int类型的变量,“指向浮点型”指针的指针只能指向float类型的变量,等等。 通常,给定类型的指针对于任何给定的类型名称类型写为*。 类型名称void表示不存在任何类型,因此类型为void *的指针可以包含数据的地址任何类型的项目。 类型void *通常用作具有处理数据的函数的参数类型或返回值类型以类型无关的方式。 任何类型的指针可以作为类型void *的值传递,然后转换为适当类型使用时。 类型为int的变量的地址可以存储在指针变量中例如,类型为void *。 当你想访问存储在void *指针中的地址的整数值时,你必须首先将指针转换为int *类型。 声明指针 您可以使用以下语句声明指向int类型的变量的指针: int *pnumber; 具有名称number的变量的类型为int *。 它可以存储int类型的任何变量的地址。 注意,你也可以写这样的语句: int* pnumber; 语句只是创建pnumber变量,但不会初始化它。 你可以初始化pnumber,使它不会通过重写声明来指向任何东西喜欢这个: int *pnumber = NULL; NULL是在标准库中定义的常量,并且对于指针等效于零。 NULL是一个值,不能指向内存中的任何位置。 如果要使用变量的地址初始化变量pnumber你已经声明,你使用运算符的地址&: int number = 5; int *pnumber = &number; 现在,number的初始值是变量的地址。 您可以在中声明常规变量和指针同样的语句,例如: double value, *pVal, fnum; 此语句声明两个双精度浮点变量,值和fnum,以及变量pVal类型“指针加倍。 例子 为了获得变量的内存地址,我们可以使用& 句法。 #include <stdio.h> int main(int argc, const char* argv[]) { int n; n = 10; printf("value n: %d \n",n); printf("address n: %x \n",&n); return 0; } 上面的代码生成以下结果。 注意 要声明一个特定数据类型的指针,我们可以使用 * 语法。 此变量由我们的指针变量的内存地址。 #include <stdio.h> int main(int argc, const char* argv[]) {...

C 结构体指针-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

C 结构体指针

学习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 结构体示例-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

C 结构体示例

学习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 函数范围-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

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 文件示例-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

C 文件示例

学习C – C文件示例 写数据到文件 我们可以将数据写入文件。 我们可以使用fopen()函数创建一个文件。 然后使用fprintf()和fputs()函数将数据写入文件。 最后使用fclose()函数关闭文件。 对于测试,我们将数据创建到文件 my.c 中。 #include <stdio.h> int main(int argc, const char* argv[]) { int i; FILE *f; f = fopen("my.c", "w+"); for(i=0;i<5;i++){ fprintf(f, "fprintf message %d\n",i); fputs("fputs message\n", f); // no format } fclose(f); printf("Data was written into a file\n"); return 0; } 上面的代码生成以下结果。 从文件读取数据 我们还可以使用fgetc()函数从文件读取数据。 #include <stdio.h> int main(int argc, const char* argv[]) { char ch; FILE *f; printf("Reading a file?.\n"); f = fopen("demo.txt", "r"); if(f==NULL){ printf("Failed to read file\n"); return 0; } while((ch = fgetc(f)) != EOF ) printf("%c",ch); fclose(f); return 0; } 上面的代码生成以下结果。

C 文件-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

C 文件

学习C – C文件 C程序员使用指针来管理用于读取和写入数据的流。 流只是文件或硬件设备,如显示器或打印机。 要指向并管理C中的文件流,请使用名为FILE的数据结构。 类型FILE的指针就像任何其他变量一样创建。 #include <stdio.h> int main(void) { //create 3 file pointers FILE *pRead; FILE *pWrite; FILE *pAppend; return 0; } //end main 上面的代码创建了三个名为pRead,pWrite和pAppend的FILE指针变量。 每个FILE指针可以打开和管理单独的数据文件。 打开和关闭文件 文件处理的基本组件是打开,处理和关闭数据文件。 打开一个文件应该有错误检查和/或处理。 未能测试文件打开的结果将导致不必要的程序结果。 要打开数据文件,请使用标准输入/输出库函数fopen()。 fopen()函数返回一个指向FILE指针的FILE指针。 #include <stdio.h> main() { FILE *pRead; pRead = fopen("file1.dat", "r"); } //end main 该程序使用fopen()函数以只读方式打开名为file1.dat的数据文件。 fopen()函数返回一个FILE指针返回到pRead变量。 fopen()函数有两个参数:文件名,第二个参数告诉fopen()如何打开文件。 下表列出了使用fopen()打开文本文件的几个常用选项。 模式 描述 r 打开文件进行阅读 w 创建写入文件; 丢弃任何以前的数据 a 写入文件结尾(追加) 上面的代码生成以下结果。 打开文件示例 打开文件后,应确保文件指针成功返回。 要测试fopen()的返回值,请测试条件中的NULL值,如下所示。 #include <stdio.h> main() { FILE *pRead; pRead = fopen("file1.dat", "r"); if ( pRead == NULL ) printf("\nFile cannot be opened\n"); else printf("\nFile opened for reading\n"); } //end main 以下条件 if ( pRead == NULL ) 可以缩短下一个条件。 if ( pRead ) 如果pRead返回非NULL,则if条件为true。如果pRead返回NULL,则该条件为false。 成功打开和处理文件后,应使用函数fclose()关闭文件。 fclose()函数使用FILE指针来刷新流并关闭文件。 fclose()函数将FILE指针名称作为参数。 fclose(pRead); 上面的代码生成以下结果。 读取数据 以下代码显示如何使用函数fscanf()和feof()读取文件的内容并检查文件的EOF(文件结尾)标记。 以下程序读取名为.dat的数据文件,直到读取文件结束标记为止。 #include <stdio.h> main() { FILE *pRead;...

C 字符类型-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

C 字符类型

学习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 浮点类型-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

C 浮点类型

学习C – C浮点类型 浮点数保存用小数点写入的值。 以下是浮点值的示例: 1.6 0.00018 1234.123 100.0 最后一个常数是整数,但它将被存储为浮点值。 浮点数通常表示为十进制值乘以10的幂,其中10的幂称为指数。 下表显示了如何显示浮点数。 值 用C写成 1.7 0.17E1 0.00009 0.9E-4 7655.123 0.7655123E4 100.0 1.0E2 /* your weight in platinum */ #include <stdio.h> int main(void) { float weight; /* user weight */ float value; /* platinum equivalent */ printf("Please enter your weight in pounds: "); /* get input from the user */ scanf("%f", &weight); value = 3.0 * weight; printf("Your weight is worth $%.2f.\n", value); return 0; } 上面的代码生成以下结果。 浮点变量 您可以选择三种类型的浮点变量,如下表所示。 关键词 字节数 值范围 float 4 +/- 3.4E(+/- 38) double 8 +/-1.7E(+/-308) long double 12 +/- 1.19E(+/- 4932) 以下代码定义了两个浮点数。 float radius; double biggest; 要写一个float类型的常量,你需要附加一个f到数字,以便将它与double类型区分开来。 当你这样声明它们时,你可以初始化前两个变量: float radius = 2.5f; double biggest = 123E30; 可变半径的初始值为2.5,变量最大值被初始化为对应于123的数字,接着是30个零。 要指定long double常数,请附加大写或小写字母L. long double huge = 1234567.98765L; 以下代码显示了如何浮动类型变量声明和初始化。 #include...

C 数据类型-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

C 数据类型

了解C – C数据类型 下表总结了变量类型。 类型 典型字节数 典型的值范围 char 1 -128至+127 或 0至+255 unsigned char 1 0至+255 short 2 -32,768至+32,767 unsigned short 2 0至+65,535 int 2 或 4 -32,768至+32,767 或 -2,147,438,648至+2,147,438,647 unsigned int 4 0至+65,535 或 0至+4,294,967,295 long 4 -2,147,438,648至+2,147,438,647 unsigned long 4 0至+4,294,967,295 long long 8 -9,223,372,036,854,775,808至+9,223,372,036,854,775,807 unsigned long long 8 0至+18,446,744,073,709,551,615 float 4 +/- 3.4E +/- 38(6位数) double 8 +/- 1.7E +/- 308(15位数) long double 12 +/- 1.2E +/- 4932(19位数) 局限性 一些符号常量来自limit.h 符号常量 表示 CHAR_BIT char中的位数 CHAR_MAX 最大char值 CHAR_MIN 最小char值 SCHAR_MAX 最大带符号char值 SCHAR_MIN 最小带符号char值 UCHAR_MAX 最大无符号char值 SHRT_MAX 最大short值 SHRT_MIN 最小short值 USHRT_MAX 最大无符号short值 INT_MAX 最大int值 INT_MIN 最小int值 UINT_MAX 最大无符号int值 LONG_MAX 最大long值 LONG_MIN 最小long值 ULONG_MAX 最大无符号long值 LLONG_MAX 最大long long值 LLONG_MIN 最小long long值 ULLONG_MAX 最大无符号long long值 使用从limit.h和float定义的常量。 #include <stdio.h> #include <limits.h> //...

C 常量-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

C 常量

学习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 =...