首页 > 就业 > 笔试

这个程序执行后会有什么错误或者效果

这个程序执行后会有什么错误或者效果



这个程序执行后会有什么错误或者效果

  #define MAX 255

  int main()

  {

  unsigned char A[MAX],i;//i被定义为unsigned char

  for (i=0;i<=MAX;i++)

  A[i]=i;

  }

  解答:死循环加数组越界访问(C/C++不进行数组越界检查)

  MAX=255

  数组A的下标范围为:0..MAX-1,这是其一..

  其二.当i循环到255时,循环内执行:

  A[255]=255;

  这句本身没有问题..但是返回for (i=0;i<=MAX;i++)语句时,

  由于unsigned char的取值范围在(0..255),i++以后i又为0了..无限循环下去.

  struct name1{

  char str;1 short x;2

  int num;

  }

  struct name2{

  char str;0

  int num;4

  short x;6

  }

  sizeof(struct name1)=8,sizeof(struct name2)=12

  在第二个结构中,为保证num按四个字节对齐,char后必须留出3字节的空间;同时为保证整个结构的自然对齐(这里是4字节对齐),在x后还要补齐2个字节,这样就是12字节。

  intel:

  A.c 和B.c两个c文件中使用了两个相同名字的static变量,编译的时候会不会有问题?这两个static变量会保存到哪里(栈还是堆或者其他的)?

  static的全局变量,表明这个变量仅在本模块中有意义,不会影响其他模块。

  他们都放在数据区,但是编译器对他们的命名是不同的`。

  如果要使变量在其他模块也有意义的话,需要使用extern关键字。

  struct s1

  {

  int i: 8;

  int j: 4;

  int a: 3;

  double b;

  };

  struct s2

  {

  int i: 8;

  int j: 4;

  double b;

  int a:3;

  };

  printf(“sizeof(s1)= %d\n”, sizeof(s1));

  printf(“sizeof(s2)= %d\n”, sizeof(s2));

  result: 16, 24

  第一个struct s1

  {

  int i: 8;

  int j: 4;

  int a: 3;

  double b;

  };

  理论上是这样的,首先是i在相对0的位置,占8位一个字节,然后,j就在相对一个字节的位置,由于一个位置的字节数是4位的倍数,因此不用对齐,就放在那里了,然后是a,要在3位的倍数关系的位置上,因此要移一位,在15位的位置上放下,目前总共是18位,折算过来是2字节2位的样子,由于double是 8字节的,因此要在相对0要是8个字节的位置上放下,因此从18位开始到8个字节之间的位置被忽略,直接放在8字节的位置了,因此,总共是16字节。

  第二个最后会对照是不是结构体内最大数据的倍数,不是的话,会补成是最大数据的倍数

    版权声明:此文自动收集于网络,若有来源错误或者侵犯您的合法权益,您可通过邮箱与我们取得联系,我们将及时进行处理。

    本文地址:https://www.gunzhua.com/jiuye/bishi/52446.html

相关内容

热门阅读
随机推荐