您的位置:首页 > 职场人生

【王道笔试题】笔试面试要点(持续更新中!!!!)

2017-11-19 22:57 232 查看
一、数组

1、下列程序执行后的结果是()(2012   中兴)

#include<stdio.h>

int main(void)
{
int a[3][3];
int i;
int j;
int *p = &a[0][0];

for( i=0;i<9;i++)
{
p[i]=i+1;
}

printf("%d \n",a[1][2]);

for( i = 0;i< 3;i++)
{
for( j=0;j<3;j++)
{
printf("%d  ",a[i][j]);
}
printf("\n");
}
return 0;
}


解题思路:

    p 是一个指向 int 型的指针 p[i] = *(p+i),故数组 a 依次被初始化为 {1,2,3,4,5,6,7,8,9}, 故 a[1][2] = 6 .。 此题是将二维数组当做一维数组来初始化,由于二维数组在内存中是连续存放的,故是可行的。

输出结果是:



2、针对 int a[10];以下表达式不可以表示为 a[1] 的地址的是 ()? (2013 腾讯)

     A、a + sizeof(int)                         B、&a[0]+1;

     C、(int*)&a+1;                             D、(int*)((char*)&a+sizeof(int))

解析:

          选 A 。sizeof(int)  4 , A是指向数组首元素的指针,指向的元素类型为 int ,每加 1 ,跳过 4 个字节。

         &a[0] 位首元素的地址,故也是指向首元素的指针,即 &a[0] 等价于 a;

          &a 为指向数组的指针,与 a 的类型不同 ( &a 类型为 int (*)[10]),但指向的单元相同;则 a + 4 指向 a[4];

          B 为 a+1 正确;

          C 中,将 &a 强制转换为 int * 类型,则执行 +1 跳过 一个 int 的大小(4),指向 a[1];

          D 中将 &a转换为 char * 类型,则 +1 跳过一个 char 的大小 (1),故指向 a[1] 的首字节需要 +4,然后转换为 int* 类型,正确。

二、字符串

       1、请写出 strcpy 和 memcpy 的别?(2012 海康视威)

             解析:

                       strcpy 和 memcpy  都是标准 C库函数,主要有以下三方面的区别:

                       (1)、复制的内容不同。strcpy 只能复制字符串,而 memcpy 能复制任意内容,例如:字符串数组、整型、结构体、类等。strcpy 只用于字符串的复制,并且它不仅会复制字符串的内容,而且还会复制字符串尾的 '\0'。memcpy 对于复制的内容没有限制,因此用途更广。

                       (2)、复制的方法不同。strcpy 不需要指定长度,它遇到被复制字符串的结束符  '\0'  时才结束,所以容易溢出。 memcppy 根据第三个参数可以指定复制的长度。因此比较安全。

                       (3)、用途不同。通常在复制字符串时用 strcpy,而需要复制其他类型数据时一般需要用 memcpy。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数组笔试题