6月6日一些C++和C的知识点

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];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值