C语言第19篇

程序分析题

1、下面程序的运行结果是什么?

#include <stdio.h>

int main()

{

int a[5] = { 1, 2, 3, 4, 5 };

int *ptr = (int *)(&a + 1);

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

return 0;

}

2、下面程序的运行结果是什么?

#include <stdio.h>

int main()

{

 int a[3][2] = { (0, 1), (2, 3), (4, 5) };

 int *p;

 p = a[0];

 printf( "%d", p[0]);

 return 0;

}

3、下面程序的运行结果是什么?

#include <stdio.h>

int main()

{

 char *a[] = {"work","at","alibaba"};

 char**pa = a;

 pa++;

 printf("%s\n", *pa);

 return 0;

}

答案:

1.

解析:a表示首元素地址,a+1表示第二个元素地址,*(a+1)表示第二个元素2;

&a是整个数组地址,&a+1表示跳过整个数组,指向数组后面的地址,(int *)(&a + 1)表示将(&a + 1)强制转换为整型指针,ptr为整型指针,里面放着5后面的地址,ptr是整型指针,所以ptr-1表示向后跳过四个字节,*(ptr - 1)表示解引用四个字节,即数字5

答案:2,5

2、

解析:二维数组里面元素实际为逗号表达式,相当于int a[3][2]={1,3,5},a[0]为第一行数组名,表示首元素地址,p里面为1的地址,p[0]==*(p+0)。

答案:1

3.

解析:常量字符串作为表达式时,它的值是字符首元素的地址,a为指针数组数组名,表示'w'的地址的地址,pa++表示跳过一个char*的地址,即'a'的地址的地址,*pa表示'a'的地址,打印结果at。

答案:at

  • 21
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值