*********************************************************************
设有如下的程序段:
- char str[5]="Hello";
- char *ptr;
- ptr=str;
执行上面的程序段后,*(ptr+5)的值为 【 C 】
A) 'o' B) '/0' C) 不确定的值 D) 'o'的地址
####
此处如果声明的数组是 char str[]="hello";的话,答案就变成了B
*********************************************************************
阅读下列程序:
- void foo()
- {
- unsigned int a = 6;
- int b = -20;
- (a+b > 6) ? puts("> 6") : puts(" < = 6");
- }
调用foo()的输出结果是: 【 >6 】 。
无符号 和 有符号相加 强制转换成 无符号 所以>6
*********************************************************************
经典算法算X的N次方
- int foo ( int x , int n)
- {
- int val;
- val =1;
- if (n> 0)
- {
- if (n%2 == 1) val = val *x;
- val = val * foo(x*x , n/2);
- }
- return val;
- }
*********************************************************************
下面程序的输出是 【 9 】//不怎么懂这题
- void foo(int [][3] );
- main()
- { int a [3][3]= { { 1,2,3} , { 4,5,6},{7,8,9}};
- foo(a);
- printf("%d" , a[2][1]);
- }
- void foo( int b[][3])
- { ++ b;
- b[1][1] =9;
- }
理解为foo函数把数组的行的首地址往后移,三个int的长度于是指向4然后把8的位置 赋值成9
*********************************************************************
32位机, 有以下定义:
sizeof(pmsg)是通常的得到指针的长度,所以是4字节,
sizeof(msg)是球数组长度,后面加‘/0’所以是2字节,
sizeof(param)中函数入参带维数的,都把数组看成是指针,所以还是4字节
*********************************************************************
已有定义如下:
unsigned char data = 0x55;
运算 data^0xAA 的结果是:【 0xFF 】 运算 (data>>4)&0xAA 的结果是: 【 0x00 】
运算 (data<<9)|0xAA 的结果是: 【 0xAAAA 】
最后一个data左移九位,自动提升到32位进行运算,所得到32位的0x0000AAAA,显示为AAAA
*********************************************************************
- char *pmsg = "hello, world!";
- strcpy(pmsg, "hi, there.");
试评论该代码。
char *pmsg = "hello, world";此处是指针申明,会在常量区找空间保存,不能对其进行操作,只能调用,声明成数组的话能操作。
*********************************************************************