工作了这么长时间,对于指针这块还是模模糊糊,最近有些体会,如下:
指针一定是要指向某块内存的,若定义了某个指针变量,既没有给它动态申请内存也没有让它指向某块内存,这时给它赋值是错误的,例:
1、int *Value = NULL;
*Value = 1; //错误,因为没有内存用来存放整数1
2、若给指针动态分配内存之后,再进行赋值,是正确的
int *Value = (int *)malloc(4); //为指针变量Value动态申请4个字节的内存
*Value = 1; //正确
//....对Value的操作
//操作之后一定要释放内存,以免造成内存泄露
if(Value)
{
free(Value);
Value = NULL
}
3、也可以使指针变量指向某块内存
int s = 1;
int *Value = &s;
*Value = 2;
执行结果是:*Value = 2,s = 2
因为指针变量Value所指向的内存是变量s地址所在内存,语句*Value= 2执行之后,内存中的内容已经变为2了,所以s的值为2
4、malloc与new的区别,详见
5、有关NULL
NULL的意思是空指针,也就是说只有指针类型的变量才可以赋值为NULL,其他类型的变量不可以,例:
char Value[255] = NULL; //错误
char Value[255] = {0};
//.....对Value的操作
if(Value == NULL) //错误
{.....}