天天看点

#面试题#

1 , static 全局变量与普通全局变量有什么区别 2 ,以下函数输出结果是什么 int main() { char *s[] = {"one", "two", "three"}, *p; p = s[1]; printf("%c, %s\n",*(p+1), s[0]); return 0; } 3 ,该函数执行后打印结果 printf("%s","123456789"+3) 4 ,用预处理指令 #define 声明一个常数,用以表明一年中有多少秒。(忽略闰年问题)

#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL  
我在这想看到几件事情:  
 #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)  
 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。
  
 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。
————————————————
版权声明:本文为CSDN博主「beiJiXinO」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/beiJiXinO/article/details/51322494
           
5,用变量 a 给出下面的定义
A)一个有 10 个整型数的数组
B)一个指向函数的指针,该函数有一个整形参数并返回一个整型数


int (*a[10])(int);

           

6 ,描述下函数指针和指针函数的区别 7 ,请写出 char *p 与 “ 零值 ” 比较的 if 语句

if(p == NULL)
在C/C++中,char是C/C++整型数据中比较古怪的一个,而且关于char还有一个特殊的语言就是char *,它在C/C++中有专门的语义,既不同于signed char *,也不同于unsigned char *,专门用于指以'\0'为结束的字符串

  C语言是弱类型还没什么,如果在C++中,你可以试一试,用

  char *p="abcd";

  是可以通过编译的

  但如果用

  signed char *p="abcd";

  还是

  unsigned char *p="abcd";

  都是不能通过编译的。

  关于这些在C/C++的语言标准或一些经典书籍如TheC++Programing Language中都有很清楚的说明。
           

8 ,写一个 C 程序,反转下面的单向链表 , 从 1>>2>>3>>4 到 4>>3>>2>>1 head

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

struct Node
{
    int data;
    struct Node* next;
}node,*p;

struct Node* init_node()
{
    struct Node *head = (struct Node*)malloc(sizeof(struct Node));
    head->next = NULL;
    return head;
}

void head_insert(int date,struct Node *head)
{
    struct Node *p1 = (struct Node*)malloc(sizeof(struct Node));
    if(p1 == NULL)
    {
        perror("malloc error");
    }
    p1->data = date;
    p1->next = head->next;
    head->next = p1;
};

//反转链表
void revert_head(struct Node* head)
{
    struct Node *pre= head;
    struct Node *cur = head->next;
    struct Node *after;
    while(cur->next != NULL )
    {
      after = cur->next;
      cur->next = pre;
     pre = cur;
     cur = after;

    }
    cur->next = pre;
    head->next->next = NULL;
    head->next = cur;

}

//打印链表
void printf_head(struct Node* head)
{
    struct Node* temp = head;
    while(temp->next != NULL)
    {
        temp = temp->next;
        printf("the date id %d\n",temp->data);

    }
}

//销毁链表
void delete_head(struct Node* head)
{
    struct Node* temp = head;
    while(temp->next != NULL)
    {
        temp = temp->next;
        printf("the date id %d\n",temp->data);
        free(temp);
    }
    free(head);
}

int main()
{


   struct Node *head = init_node();
    int num = 4;
    for(int i = 4;i > 0;i--)
    {
        head_insert(i,head);
    }
    //head_insert(num,head);
    printf_head(head);
    printf("revert \n");
    revert_head(head);
    printf_head(head);
    return 0;

}
           

编译环境:Windows,Code:Blocks 20.03

#面试题#

9 ,软件生命期分哪些阶段,各阶段的任务是什么? 10 ,翻译下面一段话 When a platform initializes from a cold boot (mechanical off or from an S4 or S5 state), the hardware platform may be configured in a legacy configuration, if not a HW-reduced ACPI platform. From these states, the platform boot firmware software initializes the computer as it would for a legacy operating system. When control is passed to the operating system, OSPM will check the SCI_EN bit and if it is not set will then enable ACPI mode by first finding the ACPI tables, and then by generating a write of the ACPI_ENABLE value to the SMI_CMD port (as described in the FADT). The hardware platform will set the SCI_EN bit to indicate to OSPM that the hardware platform is now config

继续阅读