北阳电子_C语言_面试试题

1. 已知变量data1定义如下

union data
{
        int i;
        char ch;
        float f;
}data1;
CPU为32位系统,问sizeof(data1)占多少个字节?

答:12个


2. 如下程序

void main(void)
{
        char string1[4] = {'A', 'B', 'C', 'D'};
        char string2[4] = {'E', 'F', 'G', 'H'};

        strcpy(string1, string2);               //where is wrong here?
        printf("string1 : %s\n"string2);        //where is wrong here?
}
答:1) 没有加'\0'

2) 输出乱码, 同样是没有加'\0


3. 请说明宏定义的作用

#ifndef __INVvxWorksh
#define __INVvxWorksh   //what is the purpose?

#ifdef __cplusplus      //what is the purpose?
extern "c"{             //what is the purpose?
#endif

#ifdef __cplusplus
}
#endif

#endif /* __INVvxWorksh*/
答:1) 防止文件重复引用, 若有此宏定义则不会执行此行代码

2)作用也是条件编译

3)告诉编译器按照C语言的各类来编译


4. 在Intel 32位X86平台上, 假定一段内存地址为0X00001000开始的内存的值为以下内容

0X00001000: 00001000   00011003   00040000 00060000

int *p = (int *)0X00001000; p+=2; *p=_____________;

答:0x40000


5. 实现strc()函数

char *my_strcat(char *dest, const char *src)
{
        char *head = dest;
        if(head == NULL || src == NULL)
        {   
                return NULL;
        }   

        while(*head)
                head++;
        while(*src)
                *head++ = *src++;
        *head = '\0';

        return dest;
}

6. 计算一个short类型的数中有多少个1

int count_short(int num)
{
        int count = 0;
        while(num)
        {
                if(num % 10 == 1)
                {
                        count++;
                }
                num /=10;
        }
        return count;
}

8. 实现atoi()函数,并将“123446”转换成123456

int my_atoi(const char *pInput)
{
        char *tmp = pInput;
        char ch;
        int num = 0;
        while(ch = *tmp++)
        {
                if(ch >= '0' && ch <= '9')
                {
                        num = num * 10 + ch - '0';
                }
                else
                        return -1;
        }
        return num;
}


10. 说明以下static的作用

a)在函数体内staitc修饰的变量 //静态的局部变量,只初始化一次,多次调用保留上一次的值

b)在函数体外static修饰的变量 //静态全局变量,其他文件不能访问

c)static修饰的函数 //静态函数,有文件作用域,其他文件不能访问


12. 请指出以下程序的错误

char *getmemory(void)
{
        char p[] = "helloworld";
        return p;
}

void test(void)
{
        char *str = NULL;
        str = getmemory();
        printf(str);
}
答:在getmemory()函数中,变量p是局部变量,函数介绍就释放,返回的不是有效的地址


13. 下面程序输出结果是什么?

int main(void)
{
        unsigned int a = 6;
        int b = -20;
        (a + b > 6)?printf(">6"):printf("<6");
}
答: >6, 因为在运算 a + b时进行了类型转换, int 转换成了 unsigned int, a + b = 20;







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值