Chinaunix首页 | 论坛 | 博客
  • 博客访问: 11442
  • 博文数量: 11
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-21 14:28
文章分类

全部博文(11)

文章存档

2015年(11)

我的朋友
最近访客

分类: C/C++

2015-08-18 11:04:43

1.代码考察
unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000; 
p2=(unsigned long *)0x810000;
  •      请问  p1+5=  0x801000 + 5*1 =0x801005
  •              p2+5= 0x810000 + 5*4 (=0x14) = 0x810014

2.#define SQUARE(a)((a)*(a))
    int a=5;
    int b;
    b=SQUARE(a++);
  •     结果与编译器相关,得到的可能不是平方值

3.用宏定义写出swap(x,y)
  •      #define swap(x, y)  {x = x + y;y = x - y;x = x - y;}

4.unsigned int intvert(unsigned int x,int p,int n)实现对x的进行转换,p为起始转化位,n为需要转换的长度,假设起始点在右边.如x=0b0001 0001,p=4,n=3转换后x=0b0110 0001
  •           unsigned int intvert(unsigned int x,int p,int n)
                  {
                     int i=0;
                       for(i=0;i<n;i++)
                     {
                      x ^=(1<<p);
                       p++;
                       }
                       return x
                  }

5. 什么是预编译,何时需要预编译
  •     处理(Pre-processing),在该阶段,编译器将C源代码中的包含的头文件编译进来 
  •     1)总是使用不经常改动的大型代码体。
  •     2)程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。

6.sizeof用于数组需要注意什么?
  •      sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。
  •      注意:数组名作为函数参数时,退化为指针.
  •                数组名作为sizeof()参数时,数组名不退化,因为sizeof不是函数.

7. 一个32位的机器,该机器的指针是多少位
  •      要看地址总线的位数 

8. 指出下面代码的输出,并解释为什么。 
main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
}
  •      2,5
  •      a+1:看做a的地址数值,实质上可看做是一个整数,+1相当于加 1*a的数据类型大小
  •      &a+1:看做一个数组指针int (*)[5],这时候不再是单纯的整数,而是一个二维数组,+1相当与加上一个数组元素的大小

9.
int main()
{
char a;
char *str=&a;
strcpy(str,"hello");
printf(str);
return 0;
}
  •  将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。

10.
char* s="AAA";
printf("%s",s);
s[0]='B';
printf("%s",s);
有什么错?
  •     "AAA"是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有问题。
  •      cosnt char* s="AAA";
  •      然后又因为是常量,所以对是s[0]的赋值操作是不合法的。

阅读(241) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~