C++指针
int *p1 = new int[10];
int *p2 = new int[10]();
对于内置类型(如 int double),仅仅是分配内存,并没有进行初始化,除非后面显示加() ,相当于调用它的构造函数。而对于类类型(自定义的类),只要调用new,不仅分配内存还会调用默认构造函数。(不管是对单个对象还是多个对象都适用)
sizeof() 和 strlen()区别
void example(char acWelcome[]){
printf("%d",sizeof(acWelcome));
return;
}
void main(){
char acWelcome[]="Welcome to Huawei Test";
example(acWelcome);
return;
}
32机器输出结果是 4, 64位机器输出结果是 8。数组在作为函数的参数传递时是会退化为指针,所以 sizeof(acWelcome) 算的是 指针的大小。
char str[20]="0123456789";
char* ss = "0123456789";
int a = sizeof(str); // a =20 sizeof(str) 计算的是 str分配的内存
int b = strlen(str); // b=10 strlen(b) 计算的是str中字符的长度
int c = sizeof(ss); // c =4(32位机器) sizeof(ss) 计算的是 指针的大小
int d = strlen(ss); // d =10 strlen(ss) 计算的是 ss中字符的长度
char str1[]="Hello";
int f = sizeof(str1); // f=6 sizeof(str1) 将会把'\0'也算进去
int g = strlen(str1); // g=5 strlen(str1) 只计算字符个数
函数返回指针时,在函数内一定要用 new 分配内存,否则在函数返回时就会销毁,函数会返回一个野指针,得到的值将是不确定的。
#include<stdio.h>
char *myString()
{
char buffer[6] = {0};
char *s = "Hello World!";
for (int i = 0; i < sizeof(buffer) - 1; i++)
{
buffer[i] = *(s + i);
}
return buffer;
}
int main(int argc, char **argv)
{
printf("%s\n", myString());
return 0;
}
Java
方法重载和方法重写的区别:
方法重载是在同一个类中,返回值可以不同,是根据参数的类型和个数来判断使用哪个函数。而方法重写出现在父子类中,是子类继承父类的方法,返回值必须要相同,并在此方法写自己的特性。