3. 笔试题---苏州绿控

来源:互联网 发布:非线性优化计算方法pdf 编辑:程序博客网 时间:2024/04/28 13:01

苏州绿控

1.变量的声明和定义
变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。
2.函数的作用?
一个函数就可以看成一个模块。当用到某个函数功能时,就直接调用相关的函数。
函数是C程序最基本的功能单位。
3.分层+模块化的优缺点?
各模块相对独立、功能单一、结构清晰。
层次的缺点: 使系统把过多时间花在了下层对上层的解释当中,降低了程序运行效率”—-比如Linux的X Window,几层通信来通信去,就没有Windows窗口高效。-但这并不代表,Windows窗口没有模块化设计。
4.char aa[10];为什么strlen(aa)却不是10?
strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个’\0’,如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,知道遇到’\0’停止。
char aa[10];cout<

char *str=[10];strcpy(str,"0123456789");//将会产生什么结果

分析:常字符串的长度为11,而数组的容量为10,将会造成程序中断。
2)

void getmemory(char *p){    p=(char*)malloc(100);    strcpy(p,"Hello world");} int main(){    char *str=NULL;    getmeory(str);    printf("%s\n",str);    free(str);    return 0;}

//这是原来的函数,使用的是值传递方式
void GetMemory(char p){ p=(char )malloc(100); }
//这是正确的内存分配函数,使用的是双重指针,传递进来的是str的指针地址,*p就是原来的str
void GetMemory2(char *p) { *p=(char)malloc(100); }
//这是使用引用的内存分配函数
void GetMemory3(char* &p) { p=(char*)malloc(100); }
void Test(void){
char *str=NULL;
GetMemory(str); // 该函数做的工作是 p=str, p=malloc(100); 和str一点关系都没有,str=NULL;
//GetMemory2(&str); //该函数做的工作是 char**p=&str, str=*p=malloc(100),内存分配成功
//GetMemory3(str); // 传递的是str的引用,函数内的 p还是str,分配成功
strcpy(str, “Hello World!”); //现在可以 知道,第一个函数分配内存错误,strcpy也会失败
printf(“%s\n”, str); //输出只能是空
}


0 0