1
char a[1000];
int i;
for (i = 0; i < 1000; i++)
{
a[i] = -1 - i;
}
printf("%d", strlen(a));
输出结果为:255
2
int a[3][2] = {(0, 1), (2, 3), (4, 5)};
int *p = a[0];
printf("%d", p[0]);
输出结果为:1。注意数组的初始化用的是()而非{}。
3
void fun(int i)
{
if (i>0)
{
fun(i/2);
}
printf("%d/n", i);
}
输出结果为:0 1 2 5 10
4、对指向动态分配的内存的指针对此调用free或delete,会发生运行期错误。
int *p = static_cast<int*>(malloc(10 * sizeof(int)));
free(p);
free(p);
但是对int *p = null;这样的指针p多次delete和free是没有问题的。
5、
char a[5] = {'a', 'b', 'c', 'd'};
char (*p3)[5] = &a;
char (*p4)[5] = a;这句话错误,类型不对。
6、
for(int i=0;i<5;i++)
{
static int k = i;
std::cout<<k<<std::endl; 输出5行的0
}
因为用static 声明的变量只能被初始化一次(而且当不提供初始值时被系统自动初始化为0);
static int k = 0;
for(int i=0;i<5;i++)
{
k = i;
std::cout<<k<<std::endl; 这样输出0 1 2 3 4
}
http://www.cprogramming.com/tutorial/statickeyword.html
7、
数组元素地址相减,结果为之间元素的个数
int arr[10];
cout<<&arr[4]-&arr[2]<<endl; //输出结果为2,不明白?
printf("%d %d/n", &arr[4], &arr[2]);
8、
题目如下:
a为有n个元素的int数组。
以下代码中
for(i=0, max=-Inf; i<n; i++)
if (a[i] > max)
max = a[i];
求max平均被赋值了几次。 ln(n).
定义n个随机变量a_1,...,a_n
a_i定义为前i个数中若a_i最大则为1,否则为0
则max被赋值的次数f(n)=a_1+...+a_n
对f(n)求期望E(f(n))=sum E(a_i)
而E(a_i)表示i个随机数中第i个数最大的期望,显然是1/i
所以E(f(n))=sum 1/i
9、EMC
3.补充语句,使下面程序if判断语句始终为真,不能改动if判断语句,即只能在之前加语句
if ((*f = 0)||(void *)f == (void *)&f)
{
/* statements always executed*/
}
分析:*f = 0肯能为false,所以要(void *)f == (void *)&f恒为true,那个f只能是数组,所以可以加上 int f[10];