找回密码
 注册

QQ登录

只需一步,快速开始

查看: 713|回复: 0

吉大《c语言程序设计》21春复习指导(八)

[复制链接]
发表于 2021-2-22 10:15:45 | 显示全部楼层 |阅读模式
吉大《C语言程序设计》FAQ(八)
一、字符数组如何初始化?
        1、对字符数组初始化,最容易理解的方式是逐个字符赋给数组中各元素。如char a[5]={‘r’,‘’,‘g’,‘t’,‘y’};
        2、如果“{}”中提供的初值个数大于数组长度,则作语法错误处理。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余元素自动定为空字符(即 ‘\0’)。
        3、如果提供的初值个数与预定的数组长度相同,在定义时可以省略长度,系统会自动根据初值个数确定数组长度。如: char a[]={‘r’,‘t’,‘y’,‘u’,‘I’};用这种方式可以不必去数字符个数,尤其在赋初值的字符个数较多时,比较方便。
        4、也可以定义和初始化一个二维数组。例:char a[2][3]={{‘’,‘*’,‘’},{‘*’,‘’,‘*’}}二、为什么?strcat(string, '!')?不行?
答:字符和字符串的区别显而易见, 而?strcat()?用于连接字符串。
C?中的字符用它们的字符集值对应的小整数表示。字符串用字符数组表示; 通常你操作的是字符数组的第一个字符的指针。 二者永远不能混用。要为一个字符串增加?!, 需要使用
        strcat(string, "!");三、在检查一个字符串是否跟某个值匹配,为什么下面语句不行?
char *string; ... if(string == "value") { /* string matches "value" */ ... }
答:C?中的字符串用字符的数组表示, 而?C?语言从来不会把数组作为一个整体操作?(赋值, 比较等)。 上面代码段中的?==?操作符比较的是两个指针?---?指针变量?string?的值和字符串常数?``value"?的指针值 ?---?看它们是否相等, 也就是说, 看它们是否指向同一个位置。它们可能并不相等, 所以比较决不会成功。
要比较两个字符串, 一般使用库函数?strcmp():
        if(strcmp(string, "value") == 0)
{
                /* string matches "value" */
        }四、问:结构体类型与结构体变量一样吗?
答:结构体类型与结构体变量概念不同
结构体类型:不分配内存;             结构体变量:分配内存
结构体类型:不能赋值、存取、运算;    结构体变量:可以
结构体可嵌套
结构体成员名与程序中变量名可相同,不会混淆五、问:结构体指针变量是什么?
与基本类型指针变量相似,结构体指针变量主要作用是存储其结构体变量的地址或结构体数组的地址,通过间接方式操作对应的变量和数组。在C语言中规定,结构体指针变量可以参与的运算符如下:   ,--,+ ,* ,->,.,|,&,!六、问: 要在链表中插入一个数,怎么操作?
在链表中插入节点的基本步骤如下:
第一步,获得第一个节点的地址。
第二步,找到插入节点的位置。
第三步,创建新的节点InsertNode。
第四步,将当前节点的下一节点信息存储到新创建节点InsertNode的成员变量。
第五步,将InsertNode的地址存储到当前节点的成员变量中。
第六步,结束。
struct Node
{
……
struct Node * Next; /*下一对象的位置*/
};
int InsertElement (struct Node *List,int I, struct Node *Node)
{
/* List 为链表第一个节点地址,I 为第n个元素,如果存在,返回I,否则返回0*/
struct Node *pOne=NULL;
struct Node *pNewOne=NULL;
int j=0;/*计数器*/
pOne= List;/*指向数组的第一个节点*/
/*顺序查找,直到到达链表的尾部或j=I*/
while((pOne!=NULL)&&(j<I-1))
{
pOne=pOne->Next; /*查找下一节点*/
j++;
}
if((pOne->Next==NULL)||(j>I-1)) /*第I个元素不存在*/
return 0;
pNewOne= ( struct Node *)malloc(sizeof(struct Node));
{/*拷贝参数Node信息到新增加的节点pNewOne */
…...
pNewOne ->Next= Node ->Next;
}
pNewOne ->Next= pOne ->Next; /*将下一节点的地址拷贝到插入节点的成员变量中*/
pOne ->Next= pNewOne; /*将插入节点的地址拷贝到当前节点的成员变量中*/
return j;
}七、联合的特点。
联合有以下特点:
a) 同一个内存段可用来存放几种不同类型的成员,但在每一瞬间只能存放其中一种,即每个瞬间只有一个成员起作用,其它成员不起作用。
b) 联合中起作用的是最后一次存放的成员。
c) 联合变量的地址和它的各成员的地址相同。
d) 不能在定义联合变量的同时对其进行初始化。
e) 不能把联合变量作为函数的参数,也不能使函数带回联合变量,但可以使用指向联合变量的指针。
f) 使用联合比使用结构更能节省存储空间,但其代价是访问成员的速度要慢一些。东师作业答案可以联系QQ 761296021

QQ|手机版|小黑屋|网站地图|无忧答案网 ( 冀ICP备18010495号-1 )

GMT+8, 2024-5-5 01:45

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表