我们在定义一个变量时,就会遇到诸如此类的问题,以下是我的一些总结。
eg:
int a; //定义变量a
a = 0; //初始化变量a
什么是初始化?
所谓的初始化,就是编译器在编译时,就对变量值进行了定义,实际就是给你定义的变量赋个初值(通常为0)。
有时强调初始化为的是在使用变量时,防止该变量可能被事先使用过即赋过其他的值而产生引用错误(特别是公共变量)。
另一种理解方式:
定义一个变量后,系统就会分配给这个变量块内存,如果不对这个变量进行初始化的话,在使用这个变量之前,这个变量的值是一个随机值,谁都不知道。初始化后,这个变量的值就明确了。
什么是赋值?
赋值就是给你一个变量一个值,其实初始化也相当于赋值。
eg:
int a=0 ;//定义并初始化变量a
void main()
{
a=5;
printf("%d", a);
}
这样也是可以的,我们在使用a时,可以重新给a一个值5,这叫做赋值了。
遇到的问题,关于c语言指针的初始化和赋值,这里我直接引用了叶子的文章
http://blog.csdn.net/snowq/archive/2008/01/17/2050129.aspx
关于c++初始化赋值,可以参阅:
http://www.cnblogs.com/chio/archive/2008/10/06/1305145.html
函数指针:
eg:
int simple()
{
printf("Hello!");
}
void main()
{
int (*p)(void);
p = simple;
(*p)();
}
这里牵扯到了指针函数的问题。
在网上有人这么问:
Q:为什么 (函数名)或者是(&函数名) 都可以赋值给一个函数指针?
A:指针是指指针变量,什么类型的指针存放什么类型数据的地址.
函数名和数组名一样,执行时被认为是函数(数组)的首地址.故函数名可以赋给指针.
&在c中是取地址符,即取存放函数名地址的地址.故&函数名可以赋值给指针.
我对这个答案比较满意!
那么上面的函数p = simple 就是把simple函数地址付给p,即改变了p(地址)的值,让*p指向函数simple。
这里如上面说的那样,simple和数组名一样,代表该函数的首地址,当然可以赋给p。
eg:
int a[10] = {0};
int *p;
p = a;
很不错的总结,给需要的朋友。