1.sizeof和strlen的区别
#include<stdio.h>
#include<string.h>
int main()
{
char a[10] = "12345";
char *p = "12345";
char b[20];
printf("%d %d\n",sizeof(a),strlen(a));
/*sizeof是运算符,strlen是函数,sizeof要加上‘/0‘,
strlen表示字符串的长度,且strlen的参数只能是‘char*‘ */
printf("%d %d\n",sizeof(*a),strlen(a));
printf("%d %d\n",sizeof(p),strlen(p));
printf("%d %d\n",sizeof(*p),strlen(p));
/*由于b是未知的,所以strlen是不确定的*/
printf("%d %d\n",sizeof(b),strlen(b));
printf("%d %d\n",sizeof(*b),strlen(b));
return 0;
}
运行结果:
10 5
1 5
4 5
1 5
20 23
1 23
2.下列程序的运行结果
#include<stdio.h>
int main()
{
double a[2]={3,9},*p,*q;
p=&a[0];
q=p+1;
printf("%d %d\n",(q-p),(int)q-(int)p);
return 0;
}
运行结果:1 8
3.下列程序
#include<stdio.h>
int main()
{
#define SUN 0
printf("1");
#ifndef SUN
printf("2");
#endif
printf("3");
return 0;
}
运行结果:
13
4.数组的时候int *p=(int*)malloc(10*sizeof(int)) 释放的时候 free(p)即可;这是因为编译器对malloc做了一些特殊的处理,以保证可以正确释放内存。而当int *p=new int[10]释放的时候应为delete []p,注意[]的作用说明释放的是一个数组的内存,如果delete p则只是释放的p[0],其余9个int的内存没有释放;这是因为当指明为[]的时候,编译器实际上是做了一个循环来释放这个数组的所有内存。
5.求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、 13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。
int NumberOf1Between1AndN_Solution(int n)
{
int count=0;
for(int j=1;j<=n;j++)
{
int i=j;
while(i)
{
if(i%10==1)
count++;
i=i/10;
}
}
return count;
}
6.像如a=(b++,c++)这类语句,a的值就是c++。
7.fork()函数的头文件是#include<unistd.h>,且fork()函数是按2的n次方进行递增的。