1.
A选项成员name是字符串类型,无需添加取址符
BC选项gender一个是数组,一个是指向gender的指针,都是字符型,有必要添加取址符
D选项是整型数据,也有必要添加取址符。
2.
先对双向链表做解释:
上图对应如下代码:
pnode->prev = pindex->prev;
pnode->pNext = pindex;
pindex->prev->pNext = pnode;
pindex->prev = pnode;
一、双向链表的概念
双向链表基于单链表。单链表是单向的,有一个头结点,一个尾结点,要访问任何结点,都必须知道头结点,不能逆着进行。而双链表添加了一个指针域,通过两个指针域,分别指向结点的前结点和后结点。这样的话,可以通过双链表的任何结点,访问到它的前结点和后结点。
在双向链表中,结点除含有数据域外,还有两个链域,一个存储直接后继结点的地址,一般称为右链域;一个存储直接前驱结点地址,一般称之为左链域。
双向链表结构示意图
表头为空,表头的后继节点为"节点10"(数据为10的节点);"节点10"的后继节点是"节点20"(数据为10的节点),"节点20"的前继节点是"节点10";"节点20"的后继节点是"节点30","节点30"的前继节点是"节点20";...;末尾节点的后继节点是表头。
双链表删除节点
删除"节点30"
删除之前:"节点20"的后继节点为"节点30","节点30" 的前继节点为"节点20"。"节点30"的后继节点为"节点40","节点40" 的前继节点为"节点30"。
删除之后:"节点20"的后继节点为"节点40","节点40" 的前继节点为"节点20"。
对于这道题:
struct node {
struct node* prev;
struct node* next;
}*p, *q;
// 这里指针p和q的赋值操作省去
q->prev = p->prev; // -- 1
q->next = p; // -- 2
p->prev->next = q; // -- 3
p->prev = q; // -- 4
这里因为没有存下p的前一个指针,所以有顺序要求:
1. 语句4必须在1和3之后。(因为4中将p->prev赋新值之后,就无法得到原来p前的那个节点,所以这句留在最后)
2. 其他顺序任意
3.
c语言中实际参数和形式参数之间采用单向值传递的方式来传递数据。
4.
转义字符表如下
注意背记知识即可
4.
使用strlen函数运行结果,y[]由于缺少\0,所以一直未停止运行,实际读到的值为21,大于char x[]="hello"所对应的5
具体为什么结果会是21暂时仍不明白为什么
6.
5.
结构体可以同时存储多种变量类型,而共同体同一个时间只能存储和使用多个变量类型的一种,当另一时间,变量类型被改变后,原来的变量类型和值将被舍弃。共用体的作用是同一个数据项可以使用多种格式,可以节省空间。比如,对商品进行标识时可以用整数和字符串中的一个。
struct product
{
int type;
int amount;
union id
{
long id_long;
char id_char[20];
}id1;
};
//Using union
int main() {
product p;
p.id1.id_long = 123456; //store a long number
cout << p.id1.id_long<<endl; //print 123456
cin>>p.id1.id_char; //store a char array, long value is lost
cout <<"p.id1.id_char: "<< p.id1.id_char<<endl;
cout << "p.id1.id_long: " << p.id1.id_long;
}
6.
根据解释,首当其冲的是三个本质就不一样:第一个是char* ,const p就是常量指针p的意思,p的值是不可以被修改的,所以它是一个常量指针
第二个是char const* ,这个指针已经被定义为指向常量,指向谁?p!
第三个和第二个等价
详见:
#include<stdio.h>
int main()
{
int a[20][20];
int i, j, k, n;
int i1, j1;
int input;
scanf_s("%d %d %d", &n,&i1,&j1);
k = 1;
for (i = 0; i < n / 2; i++)
{
for (j = i; j < n - i - 1; j++)//竖着走
{
a[i][j] = k;
k++;
}
for (j = i; j < n - i - 1; j++)//横着走
{
a[j][n - i - 1] = k;
k++;
}
for (j = n - i - 1; j > i; j--)//竖着走
{
a[n - i - 1][j] = k;
k++;
}
for (j = n - i - 1; j > i; j--)//横着走
{
a[j][i] = k;
k++;
}
}
printf("%d", a[i1][j1]);
}
上面是螺旋矩阵具体位置输入输出的实现方法
#include<stdio.h>
int main()
{
int h1, m1, s1, h2, m2, s2;
int huansuan1, huansuan2;
scanf("%d:%d:%d", &h1, &m1, &s1);
scanf("%d:%d:%d", &h2, &m2, &s2);
huansuan1 = s1 + m1 * 60 + h1 * 3600;
huansuan2 = s2 + m2 * 60 + h2 * 3600;
int delta = huansuan1- huansuan2;
printf("%d",delta);
}
上面是花耶妹赶时间的解决方法