1. 指针空间初始化
下面指针p1, p2申请的空间是随机还是已经标准化?
int *p1 = new int[10];
int *p2 = new int[10]();
答: p1 申请的空间是随机值, p2 申请的空间已初始化
对于内置类型而言:
new仅仅是分配内存,并不进行初始化,除非在后面显式地加上 ()
对于自定义类型而言:
只要一调用new,那么编译器不仅给他分配内存,还会调用它的默认构造函数初始化即使后面没有加(), 初始化是将内存空间填0
2. 函数外初始化
函数外部访问x等于什么?
enum string{
x1,
x2,
x3=10,
x4,
x5,
} x;
答: 0
函数外定义是0,全局变量定义时编译器会为其初始化
函数内定义,是随机值,因为没有初始化
3. 指针运算
请问
p1+5=?
请问
p2+5=?
unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;
答:
0x801005
,0x810014
一个char占一个字节, 一个long占四个字节
对一个指针做加运算, 计算方式:
p_a + n * sizeof(type_p)
, 即所加之值要乘以类型所占字节
4. sizeof
下面程序的输出是?
void example(char acWelcome[]){
printf("%d",sizeof(acWelcome));
return;
}
void main(){
char acWelcome[]="Welcome to Huawei Test";
example(acWelcome);
return;
}
答:
4
对于字符数组
char arr[]="abcd"
,sizeof(arr)
代表的是字符数组所占的字节数目(包括结尾\0
), 但对于char arr[20]="a"
而言,sizeof(arr)
的值就是20, 对于strlen(arr)
而言,求得的长度是字符串的长度(以\0
作为结束符), 前面的例子中strlen
分别输出4和1对于字符指针
char *s="0123"
而言,sizeof(arr)
单纯代表字符指针本身所占的字符数目,即4个字节.strlen(arr)
对于字符指针仍然是求得字符串长度不变