C语言面试题
#include <stdio.h> int main()
{
int a[] = {, , , , };
int* p1 = (int*)(&a + ); // <==> (unsigned int)&a+sizeof(*&a) => 整个数组后面的那个地址
int* p2 = (int*)((int)a + ); <=> 取a[]后三个字节拼接a[]第一个字节 => 0x02000000
int* p3 = (int*)(a + ); <=> a[] printf("%d\n", p1[-]); // (unsigned int)p1-1*sizeof(*p1) => a[4]
printf("%d\n", p2[]); // 0x02000000
printf("%d\n", p3[]); // a[3] return ;
}
一条语句实现strlen
return (assert(s), (*s ? strlen(s+)+ : ));
#size_t为无符号整数 strlen的返回值为 size_t 类型
size_t strlen(const char* s)
{
size_t length = ;
aasert(s);//当指针为空时运行出错 assert.h while(*s++)
{
length++;
}
return }
strcpy实现
#include <stdio.h>
#include <assert.h> char* strcpy(char* dst, const char* src)
{
char* ret = dst; assert(dst && src); while( (*dst++ = *src++) != '\0' ); return ret;
} int main()
{
char dst[]; printf("%s\n", strcpy(dst, "Delphi Tang!")); return ;
}
重置动态空间的大小:
#include <stdio.h>
#include <malloc.h> int reset(char**p, int size, int new_size)
{
int ret = ;
int i = ;
int len = ;
char* pt = NULL;
char* tmp = NULL;
char* pp = *p; if( (p != NULL) && (new_size > ) )
{
pt = (char*)malloc(new_size); tmp = pt; len = (size < new_size) ? size : new_size; for(i=; i<len; i++)
{
*tmp++ = *pp++;
} free(*p);
*p = pt;
}
else
{
ret = ;
} return ret;
} int main()
{
char* p = (char*)malloc(); printf("%0X\n", p); if( reset(&p, , ) )
{
printf("%0X\n", p);
} return ;
}
一维方式打印二维数组:
#include <stdio.h>
#include <malloc.h> void printArray(int a[], int size)
{
int i = ; printf("printArray: %d\n", sizeof(a)); for(i=; i<size; i++)
{
printf("%d\n", a[i]);
}
} int main()
{
int a[][] = {{, , }, {, , }, {, , }};
int* p = &a[][]; printArray(p, ); return ;
}
指针方式打印二维数组:
#include <stdio.h> int main(int argc, char* argv[], char* env[])
{
int a[][] = {{, , }, {, , }, {, , }};
int i = ;
int j = ; for(i=; i<; i++)
{
for(j=; j<; j++)
{
printf("%d\n", *(*(a+i) + j));
}
}
}
#include <stdio.h> int main()
{
int a[][];
int(*p)[]; p = a; printf("%d\n", &p[][] - &a[][]); // -4
}
指针阅读技巧:
右左法则
1、从最里层的(最左)圆括号中未定义的标识符看起
2、先往右看,再往左看
3、当遇到圆括号或者(方括号时可以确定部分类型),并调转方向
4、重复 2,3 知道结束
#include <stdio.h> int main()
{
int (*p2)(int*, int (*f)(int*)); int (*p3[])(int*); int (*(*p4)[])(int*); int (*(*p5)(int*))[];
}
返回 int(*)[5] 数组指针类型
#include "stdio.h"
int test(int i)
{
return i;
} int (*test(int *p))[] //返回类型为 int(*)[5]
{
static int a[]={,,,,};
return &a;
} int main(int argc, char** argv, char* env[])
{ int (*(*p5)(int*))[];
int a = ;
//p5 = &a;
p5 = test; int(*p)[] = p5(&a); printf("%d \n", *(*p+));
printf("%d \n", *(*p+)); return ;
}
动态申请二维数组(没用一维数组指针实现,而是用的普通的int *指针)
int **malloc2d(int row, int col)
{
int** ret = (int**)malloc(sizeof(int*)*row);
int* p = (int*)malloc(sizeof(int)*row*col); int i = ;
if (ret && p)
{
for (i = ; i < row;i++)
{
ret[i] = (p + i*col);
}
}
else{
free(p);
free(ret);
} return ret;
} void free2d(int **a)
{
free(a[]);
free(a);
}
二维数组做参数
#include <stdio.h> void access(int a[][], int row)
{
//没必要传递列,可以计算出来,c语言中只有一维数组 int col = sizeof(*a) / sizeof(int);
int i = ;
int j = ; printf("sizeof(a) = %d\n", sizeof(a)); for(i=; i<row; i++)
{
for(j=; j<col; j++)
{
printf("%d\n", a[i][j]);
}
}
} int main()
{
int a[][] = {{, , }, {, , }, {, , }}; access(a, );
}
求n个数的平均值
#include <stdio.h>
#include <stdarg.h> float average(int n, ...)
{
va_list args;
int i = ;
float sum = ; va_start(args, n); for(i=; i<n; i++)
{
sum += va_arg(args, int);
} va_end(args); return sum / n;
} int main()
{
printf("%f\n", average(, , , , , ));
printf("%f\n", average(, , , , )); return ;
}
按字节进行清零
#include <stdio.h> #define RESET(p, len) while( len > 0) ((char*)p)[--len] = 0 void reset(void* p, int len)
{
while( len > )
{
((char*)p)[--len] = ;
}
} int main()
{
int array[] = {, , , , };
int len = sizeof(array); reset(array, len);
RESET(array, len); return ;
}
C语言面试题的更多相关文章
- C语言面试题汇总之一
C语言面试题汇总之一 1.static有什么用途?(请至少说明两种) l 限制变量的作用域: 设置变量的存储域. 2.引用和指针有什么区别? 引用必须被初始化,指针不必: 引用初始化以后不能被改变,指 ...
- 12个有趣的C语言面试题
摘要:12个C语言面试题,涉及指针.进程.运算.结构体.函数.内存,看看你能做出几个! 1.gets()函数 问:请找出下面代码里的问题: #include<stdio.h> int ma ...
- c语言面试题之sizeof
c语言面试题之sizeof */--> c语言面试题之sizeof Table of Contents 1. sizeof 1 sizeof sizeof是c语言中判断数据类型或者表达式的长度符 ...
- C语言面试题(嵌入式开发方向,附答案及点评)
整理自C语言面试题(嵌入式开发方向,附答案及点评) 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SEC ...
- 转 C语言面试题大汇总
转 C语言面试题大汇总,个人觉得还是比较全地!!! \主 题: C语言面试题大汇总,个人觉得还是比较全地!!! 作 者: free131 (白日?做梦!) 信 誉 值: 100 ...
- 12个有趣的c语言面试题
1.gets()函数 问:请找出下面代码里的问题: #include int main(void) { char buff[10]; memset(buff,0,sizeof(buff)); gets ...
- 嵌入式开发—C语言面试题
嵌入式开发—C语言面试题 源地址:http://blog.csdn.net/xdx2ct1314/article/details/7358929 1. 用预处理指令#define 声明一个常数,用 ...
- C语言面试题(一)
裸辞后,本周开始求职之旅.令人厌烦的是,大多数公司都会通知你去面试,然后拿出一纸试题,开始作答,最后笔试成绩作为重要的参考来决定是否录取你.对于大学四年挂了三年科的我,习惯遇到问题令辟溪径,从不 ...
- 华为C语言笔试题集合
①华为笔试题搜集 1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 2) 在模块内(但在函数体外),一个被声明为 ...
- C语言面试题大汇总
static有什么用途?(请至少说明两种)1.限制变量的作用域2.设置变量的存储域7. 引用与指针有什么差别?1) 引用必须被初始化,指针不必.2) 引用初始化以后不能被改变,指针能够改变所指的对象. ...
随机推荐
- jpype调用jar
import easyguiimport osfrom jpype import * jarpath = "d:\jar"print "jarPath: %s" ...
- 0517Scrum项目4.0
一.任务看板: 二.任务认领情况: 冯铭杰:界面的设置和部分功能的实现: 梁毅乾:四则运算的功能实现以及代码的维护: 陈施恩:监督小组成员的工作进度,以及代码的编写: 张俊毅:四则运算的算术随机产生: ...
- PHP的三种输出方式
(1)echo 是PHP语句,没有返回值,用于输出一个或多个字符串 (2)print() 是函数,可以有返回值,只能打印出简单类型变量的值,例如int.string (3)print_r() 是函数, ...
- git中Member设置为Developer也可以的
之前说Member至少要设置为master,或者owner才行,昨天发现依然可以设置为developer. 因为有个位置可以设置Developers can push,√上就可以了. 比如,我不希望大 ...
- hdoj 3501
Problem Description Given a positive integer N, your task is to calculate the sum of the positive in ...
- 【59测试】【树】【dp】
第一题 A : 这棵树由n个节点以及n - 1条有向边构成,每条边都从父亲节点指向儿子节点,保证除了根节点以外的每个节点都有一个唯一的父亲.树上的节点从1到n标号.该树的一棵子树的定义为某个节点以及从 ...
- android使用html+javascript来制作页面
一般的android界面使用的是XML.但是XML如果要制作很高级的UI,会很复杂.如果使用HTML老进行UI设计就会简单很多. android早就提供了这样的借口. WebView.addJavas ...
- linux下各种软件的安装过程
//////知识储备//////////////////////////////////////////////////////////////////// /var 下存放着服务和经常改变的文件 / ...
- POJ 1236 SCC+缩点
题意:一张有向图,一问至少给几个点发送软件,才能让所有点都能收到软件:二问是至少添加几条边才能让整个图是一个连通分量: 分析:一般求连通分量都会求缩点,在这里缩点之后,生成一张新的图,在新的图中求每一 ...
- ACE - Reactor模式源码剖析及具体实现(大量源码慎入)
原文出自http://www.cnblogs.com/binchen-china,禁止转载. 在之前的文章中提到过Reactor模式和Preactor模式,现在利用ACE的Reactor来实现一个基于 ...