#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语言面试题的更多相关文章

  1. C语言面试题汇总之一

    C语言面试题汇总之一 1.static有什么用途?(请至少说明两种) l 限制变量的作用域: 设置变量的存储域. 2.引用和指针有什么区别? 引用必须被初始化,指针不必: 引用初始化以后不能被改变,指 ...

  2. 12个有趣的C语言面试题

    摘要:12个C语言面试题,涉及指针.进程.运算.结构体.函数.内存,看看你能做出几个! 1.gets()函数 问:请找出下面代码里的问题: #include<stdio.h> int ma ...

  3. c语言面试题之sizeof

    c语言面试题之sizeof */--> c语言面试题之sizeof Table of Contents 1. sizeof 1 sizeof sizeof是c语言中判断数据类型或者表达式的长度符 ...

  4. C语言面试题(嵌入式开发方向,附答案及点评)

    整理自C语言面试题(嵌入式开发方向,附答案及点评) 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SEC ...

  5. 转 C语言面试题大汇总

    转 C语言面试题大汇总,个人觉得还是比较全地!!! \主 题:   C语言面试题大汇总,个人觉得还是比较全地!!!  作 者:   free131 (白日?做梦!)   信 誉 值:   100    ...

  6. 12个有趣的c语言面试题&nbsp;

    1.gets()函数 问:请找出下面代码里的问题: #include int main(void) { char buff[10]; memset(buff,0,sizeof(buff)); gets ...

  7. 嵌入式开发—C语言面试题

    嵌入式开发—C语言面试题 源地址:http://blog.csdn.net/xdx2ct1314/article/details/7358929   1. 用预处理指令#define 声明一个常数,用 ...

  8. C语言面试题(一)

       裸辞后,本周开始求职之旅.令人厌烦的是,大多数公司都会通知你去面试,然后拿出一纸试题,开始作答,最后笔试成绩作为重要的参考来决定是否录取你.对于大学四年挂了三年科的我,习惯遇到问题令辟溪径,从不 ...

  9. 华为C语言笔试题集合

    ①华为笔试题搜集 1.static有什么用途?(请至少说明两种)     1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变.     2) 在模块内(但在函数体外),一个被声明为 ...

  10. C语言面试题大汇总

    static有什么用途?(请至少说明两种)1.限制变量的作用域2.设置变量的存储域7. 引用与指针有什么差别?1) 引用必须被初始化,指针不必.2) 引用初始化以后不能被改变,指针能够改变所指的对象. ...

随机推荐

  1. ShopNC小实例

    shopnc 之模式: shopnc一般的url访问为:http://localhost/shopnc1/admin/index.php?act=sui&op=hello Controller ...

  2. CSS3制作漂亮的照片墙

    CSS3可以做动画大家肯定都是耳熟能详的了,但是大家有木有巧妙的利用这一个功能来制作一款漂亮的照片墙呢? 那么今天我们就利用CSS3动画这一特性来一起制作漂亮的照片墙吧! 第一部分:HTML 这里我们 ...

  3. sprite图在移动端的使用

    做移动端页面时,设计稿中的切片图片往往是实际的2倍,此处记录图片正常显示大小的技巧. 当图片是单张的话,可以对容器设计实际大小,然后设置background-image,为了让图片缩小一倍,可以设置b ...

  4. Mybatis根据表自动生成相关代码

    这个地方的生成需要用到三个文件,generatorConfig.xml.mybatis-generator-core-1.3.1.jar和mysql-connector-java-5.1.29.jar ...

  5. <转>.php导出excel(多种方法)

    基本上导出的文件分为两种:1:类Excel格式,这个其实不是传统意义上的Excel文件,只是因为Excel的兼容能力强,能够正确打开而已.修改这种文件后再保存,通常会提示你是否要转换成Excel文件. ...

  6. ubuntu下安装svn服务器

    sudo apt-get install apache2 sudo apt-get install subversion sudo apt-get install libapache2-svn 其次, ...

  7. cortex-a8硬件基础练习

    实验要求:定时通过串口打印adc,时间和温度,开关量检测和通过串口接收命令控制led小灯的动作 下面是整理的代码: #include "s5pc100.h"#include &qu ...

  8. Eclipse Java 调试基本技巧

    前言 这一部分是Eclipse中最为重要的部分.调试的重要性想必大家都清楚. 调试无疑是做项目最苦比的事情,但优秀的编码习惯,良好的调试方式能让这没那么苦,甚至还有点乐趣:). 本文讲解使用Eclip ...

  9. pip install 出现报asciii码错误的问题

    原因是pip安装python包会加载我的用户目录,我的用户目录恰好是中文的,ascii不能编码. 解决办法是: python目录 Python27\Lib\site-packages 建一个文件sit ...

  10. strncpy基本用法

    见百度百科. 注意这句话: (c/c++)复制src中的内容(字符,数字.汉字....)到dest,复制多少由num的值决定,返回指向dest的指针.如果遇到null字符('\0'),且还没有到num ...