C语言深度题集合,希望得到解决。

1.在x86系统下,输出的值为多少? 为什么?

// test3.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"


int main()
{
 int a[5]={1,2,3,4,5};
 int *ptr1 = (int *)(&a+1);
 int *ptr2 = (int *)((int)a + 1);
 printf("%x,%x",ptr1[-1],*ptr2);
 getchar();
 return 0;
}

2

      分别用一个常数表示不同颜
色:
    enum Color

    {
        GREEN = 1,
        RED,
        BLUE,
        GREEN_RED = 10,
        GREEN_BLUE

     }ColorVal;

     其中各常量名代表的数值分别为:

        GREEN = 1
        RED = 2
        BLUE = 3
        GREEN_RED = 10
        GREEN_BLUE = 11

.枚举与#define 宏的区别:

 1),#define 宏常量是在预编译阶段进行简单替换。枚举常量则是在编译的时候确定其值。

 2),一般在编译器里,可以调试枚举常量,但是不能调试宏常量。

 3),枚举可以一次定义大量相关的常量,而#define 宏一次只能定义一个。

 两个问题:

 A ),枚举能做到事,#define 宏能不能都做到?如果能,那为什么还需要枚举?
 B),sizeof (ColorVal)的值为多少?为什么?
3.typedef 和 define 的区别

   A)#define INT32  int

         unsigned INT32 i = 10;

    B)typedef int int32;

        unsigned int32 j = 10;

A正确B不正确;

 把B改为

      typedef unsigned int int32;

       int32 j = 10;

编译就能通过

 C)#define PCHAR        char*

          PCHAR p3,p4;

    D)typedef char* pchar;

          pchar p1,p2;

     两组代码编译都没有问题,但是,这里的p4 却不是指针,仅仅是一个char 类型的字符。
这种错误很容易被忽略,所以用#define 的时候要慎之又慎。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值