摘要:有时需要使几种不同类型的变量存放到同一段内存单元中。例如可以一个整形变量,一个字符型变量,一个实型变量放在同一地址开始的内存单元中。以上3个变量在内存单元中占的字节数不同,但是都从同一地址开始存放。也就是使用覆盖技术,几个变量互相覆盖。 共用体和结构体形式相似。但含义不同。 结构体变量所占的内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。共用体变量所占的内存长度等于最长的成员的长度。 共用体类型数据的特点: (1) 同一内存段可以用来存放几种不同类型的成员,但在每一瞬间只能存放其中一种,而不是几种同时存在。也就是说在每一瞬时只有一个成员起作用,其他的成员不起作用,即不是几.
阅读全文
摘要:链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。 链表有一个 "头指针" 变量,它存放一个地址,该地址指向一个元素。链表中每一个元素称为 "结点" ,每一个结点都应包括两部分:用户需要用的实际数据和下一个结点的地址。可以看出,"头指针" 指向第一个元素;第一个元素指向第二个元素...知道最后一个元素,该元素不再指向其他元素,它称为 "表尾",它的地址部分放一个 "NULL"(表示"空地址"),链表到此结束。 在静态链表中,即所有结点都是在程序中定义的,不是临
阅读全文
摘要:1.多维数组元素的地址 关于这个我只是想说:骑白马的不一定是白马王子,还有可能是唐僧。 搞清多维数组的地址表示是最基本的,例如一个3*4的多维数组 a[3][4]={{1,3,5,7},{2,4,6,8},{9,11,13,15}}; 显然 a 是一个数组名,首先 a 中的一级元素并不是具体的数,而是3个一维数组( 即3行 a[0] , a[1] , a[2] )这三个元素每一个下面又包括 4 个元素 a[0][0],a[0][1],a[0][2],a[0][3];即二维数组是 " 数组的数组 ",即二维数组 a 是由3个一维数组组成的。 从2二维数组的角度来看 a 代表二
阅读全文
摘要:一个函数可以返回一个整形值、字符值、实型值等,也可以返回指针型的数据,即地址。 这种返回指针值的函数,一般定义形式为 类型名 * 函数名 ( 参数列表 ) 例如 int *a( int x,int y); a 是函数名,调用它以后能得到一个指向整形数据的指针(地址)。( ) 的优先级高于 * 所以a(int x,int y)是函数,前面加个 *,表示此函数是指针型函数(函数值是指针)。最前面的 int 表示返回的指针指向整形变量。 例:有若干学生的成绩(每个学生有4门成绩),要求在用户在输入学生序号以后,能输出该学生的全部成绩。用指针函数来实现。 1 #include <stdio.h&
阅读全文
摘要:(一) 用函数指针变量调用函数 可以用指针变量指向整形变量、字符串、数组、结构体、也可以指向一个函数。一个函数在编译时被分配一个入口地址。这个入口地址就称为函数指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。用简单的数值比较为例: 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main() 5 { 6 int max(int,int); 7 int (*p)(int,int); 8 int a,b,c; 9 p = max;10 scanf("%d,%d",&a,&
阅读全文
摘要:一个 C 程序可由一个主函数和若干其他函数构成。由主函数调用其它函数,其它函数也可以相互调用。同一个函数可以被一个或多个函数调用任意多次。
阅读全文
摘要:C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。例如: int n; scanf("%d",&n); /*在程序中临时输入数组大小*/ int a[n]; 这样肯定是不行的。 二维或则是多维数组在内存中是按顺序存放的。 字符串处理函数 1,puts 函数 2,gets 函数 3,strcat 函数是string catenate(字符串连接),连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。 4,strcpy 和 strncpy 函数 字符串复制 5,str
阅读全文
摘要:每一个学习和使用 C 语言的人,都应当深入地学习和掌握指针。我汗颜啊。。。 一个变量的地址称为该变量的"指针",如果有一个变量专门用来存放另一个变量的地址(即指针),则它称为指针变量。比如 int i; int *p; p = & i;如果 i 的地址是2000,那么2000是变量 i 的指针。p就是一个指针变量。指针变量的值就是指针(即地址)。总之,指针就是一个地址,而指针变量是存放地址的变量。 变量的指针就是变量的地址。存放变量地址的变量就是指针变量,它是用来指向另一个变量的。 int * p1 , *p2 ;定义了两个指针变量 p1 和 p2 ,它们是指向整形变量的指针变量。" *
阅读全文
摘要:C语言还没入门,慢慢学,急不得。。。 在《NIOS II的那些事儿》的第一课LED实验中我就遇到了难题。。。 在生成的 system.h 文件中的PIO配置部分有这么一句: #define PIO_LED_BASE 0x02000000 我们自己写的 sopc.h 文件是这样的: 在主函数 main.c 中我们是这样用的: 首先就要搞清楚 typedef 的作用,typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。在编程中使用typedef目的一般有两个,一
阅读全文
摘要:预处理命令是由 ANSI C 统一规定的,但是它不是C语言本身的组成部分,不能直接对它们进行编译。必须在对程序进行通常编译(包括词法和语法分析、代码生成、优化等)之前,先对程序中的特殊命令进行 "预处理"。 C语言提供的预处理功能主要有以下3种: 1. 宏定义 #define 2. 文件包含 #include 3.条件编译 #if 宏定义不是C语言语句,不必在行末加分号。如果加分号则会连分号一起进行置换。 在文件包含处理中,#includefile2.h 和 #include "file2.h"都是合法的。二者的区别是用时,系统到存放 C 库函数头文件的
阅读全文
摘要:坚决归零。。。 C语言应注意的基本编程规范: 1,文件名用小写字母、下划线、数字的组合命名,不可出现空格等其他字符,更不允许出现汉字、日语、俄语等 ASCII码字符。 2,每个.c文件都要对应一个.h文件来配合其对外资源声明。.h文件内可包括 宏定义、类型定义、对外资源(全局变量、全局函数)声明。 .c文件可以包含变量声明、函数原型、函数体。为了防止重复调用,.h文件的逻辑开头需要加入开关控制。 3,宏、枚举体均需要用大写字母、数字及下划线的组合,宏与常量之间用 "tab” 隔离,同一类型含义的宏定义在一起,并放于相关的头文件中。宏定义以能表达清楚含义为标准。 4,我们可以用c关键字
阅读全文
摘要:1.6 验证表达式getchar() != EOF的值是0还是1。[代码] 一个优先级的小问题,因为!=的优先级要高于=,所以原式等价于c = (getchar() != EOF),从系统的标准输入读取字符并使用了这个表达式。当有字符可读时,getchar()不会返回文件结束符(即EOF),所以getchar() != EOF的取值为真,c将会被赋值为1。当程序遇到文件结束符时,取值为假,c将被...
阅读全文