0
点赞
收藏
分享

微信扫一扫

C面试题(二)


沙场上才能训练出能战斗的士兵。时间久了,需要回炉。做题能力思维没有了,有点缺乏思考深入动脑筋。

1、关于float 与零值比较

#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>

int _tmain(int argc, _TCHAR* argv[])
{
float f = 1.0;
float f1 = f / 3.0;
float f2 = f1*3.0;

float fout = f - f2;

printf("f1:%lf\r\n",f1);
printf("f2:%lf\r\n",f2);

printf("fout:%lf\r\n",fout);

float f_f, f_f1, f_f2, f_f3;;
f_f = 65.02;
f_f1 = 65;

f_f2 = f_f - f_f1;
f_f3 = 0.02;

if (f_f2 > f_f3)
{
printf(">\r\n");
}
else if (f_f2 < f_f3)
{
printf("<\r\n");
}
else
{
printf("=\r\n");
}


if ((f_f2 >= -0.02) && (f_f2 <= 0.02))
{
printf("float in\r\n");
}

printf("big data:%f-%f = %f ,%f\r\n",f_f,f_f1,f_f2,f_f3);
f_f = 63.02;
f_f1 = 63;
f_f2 = f_f - f_f1;
printf("small data:%f-%f = %f ,%f\r\n", f_f, f_f1, f_f2, f_f3);

printf("The Numbers of bit are different\r\n");
system("pause");
return 0;
}

C面试题(二)_常量指针

这个实际很难这样应用,咋看一脸懵逼。注意一点存储格式是不一样,代表的位数和精度是不一样的。


2、指针定义的区别

char * const p; char const * p const char *p 

解答:

char * const p; //常量指针,p的值不可以修改 

char const * p;//指向常量的指针,指向的常量值不可以改 

const char *p; //和char const *p 

指针常量是指定义了一个指针,这个指针的值只能在定义时初始化,其他地方不能改变。常量指针
是指定义了一个指针,这个指针指向一个只读的对象,不能通过常量指针来改变这个对象的值。
指针常量强调的是指针的不可改变性,而常量指针强调的是指针对其所指对象的不可改变性。
注意:无论是指针常量还是常量指针,其最大的用途就是作为函数的形式参数,保证实参在被调用
函数中的不可改变特性。

3、数组指针地址操作的理解

main() 
{
int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1)); }

输出:2,5 

*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5 

&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int) int *ptr=(int *)(&a+1); 

则ptr实际是&(a[5]),也就是a+5 原因如下: 

&a是数组指针,其类型为 int (*)[5]; 

而指针加1要根据指针类型加上一定的值, 不同类型的指针+1之后增加的大小不同 

a是长度为5的int数组指针,所以要加 5*sizeof(int) 所以ptr实际是a[5] 

但是prt与(&a+1)类型是不一样的(这点很重要) 所以prt-1只会减去sizeof(int*) 

a,&a的地址是一样的,但意思不一样,a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5]. 


#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>

int _tmain(int argc, _TCHAR* argv[])
{
int a[5] = {1,2,3,4,5};
int *ptr = (int *)(&a + 1);

printf("%d-%d\r\n",*(a+1),*(ptr-1));

ptr = (int *)(a + 1);
printf("new:%d-%d\r\n", *(a + 1), *(ptr - 1));

printf("new sequence:%d-%d\r\n", *(ptr + 1), *(ptr++));
system("pause");
return 0;
}

C面试题(二)_常量指针_02


举报

相关推荐

0 条评论