c语言–形参实参基础
1.发生传值调用时,形参和实参各占一个独立的存储空间。因为值传递。不会修改原值,所以不是一块空间。
2.
char a[] = "xyz", b[] = {'x', 'y', 'z'};
if (strlen(a) > strlen(b))
printf("a > b\n");
else
printf("a <= b\n");
strlen函数是从第一个元素开始到遇到第一个’\0’为止字符的个数,由于第二个数组中结束符 ‘\0’位置未知,所以strlen(b)>strlen(a)。
3.
#include "stdio.h"
int func(int x, int y)
{
return (x + y);
}
int main()
{
int a = 1, b = 2, c = 3, d = 4, e = 5;
printf(" %d\n", func((a + b, b + c, c + a), (d, e)));
return 0;
}
逗号表达式的结果是其最右边表达式的值
4.
以下代码打印的结果是(假设运行在 i386 系列计算机上):
struct st_t
{
int status;
short *pdata;
char errstr[32];
};
st_t st[16];
char *p = (char *)( st[2].errstr + 32 );
printf( "%d", ( p - (char *)(st) ) );
char*p = (char*)( st[2].errstr + 32 );//第3个的errstr字符串+32后是第4个结构体的首指针
printf( "%d", ( p - (char*)(st) ) );//p减去第0个指针就是求4-0中间有多少字节,就是40*3=120
st_t大小为40
设st起始地址为0
str[2].errstr起始地址为40*2+8=88
p存储的地址为88+32
结果显然为120
5.
对于派生类的构造函数,在定义对象时构造函数的执行顺序为?
1:成员对象的构造函数
2:基类的构造函数
3:派生类本身的构造函数
213
理解:1.类的构造函数可能使用类的对象成员,因此类的对象成员→类的构造函数
2.派生类的构造函数可能使用父类的对象成员,因此基类的构造函数→派生类的构造函数
3.析构和构造刚好相反~
6.
在计算机中,表示汉字时,UTF-16是用2个字节,UTF-8是用三个字节。如果保存成文本文件,还需要标识,UTF-16占用两个字节,UTF-8占用三个字节。