指针与数组笔试题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.请问下面三种变量声明有何区别?请给出具体含义
a)int const *p;
b)int* const p;
c)int const* const p;
2.在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个
纯粹的ANSI编译器。写代码去完成这一任务。
答:为了访问一绝对地址把一个整型数强制转换(typecast)为一指针;
int *ptr;
ptr = (int *)0x67a9;
*ptr = 0xaa55;
3.下面程序的输出结果是多少?
main()
{
int a[5] = {1,2,3,4,5};
int *ptr = (int*)(&a+1);
printf("%d %d" , *(a+1), *(ptr-1) );
}
答:2 5
4.下面程序的输出结果是多少?
void foo(int [][3] );
main()
{
int a [3][3]= { { 1,2,3} , { 4,5,6},{7,8,9}};
foo(a);
printf("%d" , a[2][1]);
}
void foo( int b[][3])
{
++ b;
b[1][1] =9;
}
答:9
5.下面程序的输出结果是多少?
main()
{
int a[][3] = { 1,2,3 ,4,5,6};
int (*ptr)[3] =a;
printf("%d %d " ,(*ptr)[1], (*ptr)[2] );
++ptr;
printf("%d %d" ,(*ptr)[1], (*ptr)[2] );
}
答:2 3 5 6
6.这3个函数哪一个最可能引起指针方面的问题
int *f1(void)
{
int x =10;
return(&x);
}
int *f2(void)
{
int*ptr;
*ptr =10;
return ptr;
}
int *f3(void)
{
int *ptr;
ptr=(int*) malloc(sizeof(int));
return ptr;
}
答:f1 和f2
7.下面程序的输出结果是多少?
main()
{
char p;
char buf[10] ={ 1,2,3,4,5,6,9,8};
p = (buf+1)[5];
printf("%d" , p);
}
答:9
8.下面程序的输出结果是多少?
Void f(char**);
main()
{
char * argv[] = { "ab" ,"cd" , "ef" ,"gh", "ij" ,"kl" };
f( argv );
}
void f( char **p )
{
char* t;
t= (p+= sizeof(int))[-1];
printf( "%s" , t);
}
答:gh
9.