1.C语言中,函数返回值类型的定义可以缺省,此时函数返回值的隐含类型是 int。
2.在VS2013下,这个结构体所占的空间大小是12字节。
typedef struct{
int a;
char b;
short c;
short d;
}AA_t;
一般编译器为 12 个字节。
因为 一般编译器 定义 int 为 4 字节,short 为 2字节, char 为 1字节,而且要考虑 内存分配 4 字节对齐。
int a; -- 需要 4 bytes
char b; -- 需要 1 byte
short c; -- 需要 2 bytes
short d; -- 需要 2 bytes.
分配 a 4 字节
分配 b c 4 字节 (浪费1字节 )
分配 d 4 字节 (浪费2字节 )
共用去 12 字节.
3.若 int a=10; 则执行表达式
a += a *= a -= a / 3;
后 a的值为 98.
4. 以下程序中 while 循环的循环次数是 死循环,不能确定次数。
void main()
{
int i = 0;
while (i<10)
{
if (i < 1)
continue;
if (i == 5)
break;
i++;
}
}
5.算法题
要求写一个函数,将字符串中的空格替换为%20. 样例: “abc defgx yz"转换成 ”abc%20defgx%20yz“。
//字符串替换空格:实现一个函数,把字符串里的空格替换成“%20”
#include <stdio.h>
#include <assert.h>
void replace(char *src)
{
assert(src);
int OldLen = 0; //原字符串长度
int NewLen = 0; //新字符串长度
int BlackNum = 0; //空格数量
int OldBack = 0; //原字符串尾部
int NewBack = 0; //新字符串尾部
while (src[OldLen] != '\0')
{
if (src[OldLen] == ' ')
{
BlackNum++;
}
OldLen++;
}
NewLen = OldLen + BlackNum * 2;
OldBack = OldLen - 1;
NewBack = NewLen - 1;
while (OldBack != 0)
{
if (src[OldBack] == ' ')
{
src[NewBack--] = '0';
src[NewBack--] = '2';
src[NewBack] = '%';
}
else
{
src[NewBack] = src[OldBack];
}
OldBack--;
NewBack--;
}
}
int main()
{
char p[20] = "hello world !";
replace(p);
printf("%s\n", p);
system("pause");
return 0;
}