学点 C 语言(29): 数据类型 - 定义新类型(typedef)自定义的类型名一般要大写, 以提示这是自命名的类型.把 unsigned long 更名为 UINT:include <stdio.h>int main(void){typedef unsigned long UINT; UINT num = 1234567890; printf("%lu\n", num); getchar(); return 0;}给一个结构重命名:include <stdio.h>int main(void){struct Rec { char...
学点 C 语言(28): 数据类型 - 联合(union)在结构中, 每个字段的数据类型是唯一的; 使用联合可以在一个字段中储存不同的数据类型.不同的数据类型共享一块内存. 当然其内存大小应依着大的来.联合中的数据, 非此即彼, 只有一个有效; 应该有说明在某个数据中此时有用的是什么类型.除了共享内存以外, 联合与结构一样.union 的大小是其中最大数据成员的大小:include <stdio.h>int main(void){union MyUnion { short n1; int n2; double n3; }; printf(&q...
学点 C 语言(27): 数据类型 - 结构中的 "位字段"所有基础的数据类型, 最大的也不过 10 个字节;我们可以自定义的数据类型 -- "结构", 通过把若干类型组合在一起, 让一种类型可以大很多.我们知道, 一个字节有八个 Bit 组成; 能否把一种类型缩小、缩小到 Bit 级?结构中的 "位字段" 是以 Bit 为单位的, 这已经是计算机的最小单位, 大小是 char 类型的 1/8.下面的例子中定义的位字段, 分别有 1-4 Bit 大小; 1 Bit 的字段只能放两个数(0、1), 4 Bit 的字段也只能放下 16 个数:结构体可以包含位字段:include <st...
学点 C 语言(26): 数据类型 - 结构的更多可能包含数组的结构:include <stdio.h>int main(void){struct Rec { int x[3]; int y; } r1; r1.x[0] = 11; r1.x[1] = 22; r1.x[2] = 33; r1.y = 99; printf("%d,%d,%d,%d", r1.x[0], r1.x[1], r1.x[2], r1.y); getchar(); return 0;}结构中的结构:include <stdio.h>...
学点 C 语言(25): 数据类型 - 结构数组与结构指针结构数组:include <stdio.h>int main(void){struct Rec {int x,y;}; struct Rec rs[10]; size_t i; for (i = 0; i < sizeof rs/sizeof rs[0]; i++) { rs[i].x = i; rs[i].y = i * 2; } for (i = 0; i < sizeof rs/sizeof rs[0]; i++) { printf("%d, %d\n&...
学点 C 语言(24): 数据类型 - 结构(struct)结构就是多个变量的集合:include <stdio.h>int main(void){struct Rec { int x; int y; }; struct Rec r1; r1.x = 111; r1.y = 222; printf("%d, %d", r1.x, r1.y); getchar(); return 0;}定义时同时声明变量:include <stdio.h>int main(void){struct Rec { int x,y; }...
学点 C 语言(23): 数据类型 - 给指针分配内存C 语言的内存分配很简单: malloc、calloc、realloc、freemalloc(字节数); 返回内存段的首地址, void 的.calloc(个数, 类型大小); 和 malloc 的区别就是它会初始化内存为空.realloc(原指针, 字节数); 重新分配由 malloc、calloc 分配的内存; 这里有太多注意事项:1、如果缩小了, 会截掉一块, 会保留前面的内容;2、如果扩大了, 仍会保留已有的内容, 但新加的内存不会初始化;3、在扩大时, 有可能内存地址会变化, 这样原来的指针就废了, 不过返回值是新指针, 所...
学点 C 语言(22): 数据类型 - 多维数组与指针关于数组的首地址:include <stdio.h>int main(void){char cs[2][3] = { {'A','B','C'}, {'D','E','F'} }; char *p1,*p2,*p3,*p4; p1 = p2 = p3 = p4 = NULL; /* 下面四个指针都是指向了同一个地址 */ p1 = &cs[0][0]; /* 这个最好理解 */ p2 = &cs[0]...
学点 C 语言(21): 数据类型 - 数组与指针获取数组的地址无须 &, 因为数组名本身就是个地址include <stdio.h>int main(void){char c = 'A'; char cs[] = "ABC"; printf("%c, %s\n", c, cs); /* 获取字符及字符数组的内容 */ printf("%p, %p, %p\n", &c, cs, &cs); /* 获取字符及字符数组的地址, cs 与 &cs 没有区别*/ getcha...
学点 C 语言(20): 数据类型 - 指针通过 &变量 可以获取变量地址:include <stdio.h>int main(void){int num = 10; printf("变量值: %d\n", num); printf("变量址: %d\n", &num); getchar(); return 0;}表示变量地址的变量就是指针:include <stdio.h>int main(void){int num = 10; int *p = # printf("%d, %p\n", ...
学点 C 语言(19): 数据类型 - 数组数组的标志是 []:include <stdio.h>int main(void){int nums[3]; nums[0] = 11; nums[1] = 22; nums[2] = 33; printf("%d, %d, %d", nums[0], nums[1], nums[2]); getchar(); return 0;}数组的大小和维数:include <stdio.h>int main(void){int nums[10]; printf("数组大小是: %d\n&qu...