第一题;
请写出以下代码输出
1
2
3
4
5
int a[5] = {1, 2, 3, 4, 5};
int *ptr = (int *)(&a + 1);
printf("%d, %d", *(a + 1), *(ptr + 1));
我的答案:
#include<stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
//int *ptr = (int*)(&a + 1);//此处&a,a是数组地址,&a再取地址,这样不行的,我的理解如下:
int* q = a;
int* p =(q +1);
int* ptr = p;
printf("%d ,%d",*(a+1),*(ptr+1));
return 0;
}
结果;2 ,3
第二题
写一个标准宏Max,并给出以下代码的输出
1
2
3
4
5
6
int array[5] = {1, 2, 3, 4, 5};
int *p = &array[0];
int max = Max(*p++, 1);
printf("%d %d", max, *p);
我的答案:
/*此处Max没有写成标准宏,只定义了一个Max函数*/
#include <stdio.h>
int Max(int a,int b)
{
return a>b?1:0;
}
int main(int argc, const char * argv[]) {
int array[5]={1,2,3,4,5};
int *p= &array[0];
int max = Max(*p++,1);
printf("%d %d",max,*p);
printf(" \n");
return 0;
}
结果:0,2
注:请楼主看一下,是否正确,多多交流,谢谢 |