《C和指针》书上说
int *a
...
*a = 12
这样写声明一个变量,但未对指针初始化
如果指针是函数的形参,比如
void func(int *a)
{
(* a) = 12;//这样操作有无问题?
}
=======================
楼主,你应该理解清楚什么是指针:通俗的讲,指针是一个地址,指针的初始化就是让指针指向一个确定的地址。*是指针的解引用符,意思是取指针指向的地址里的数据。
因此,int a;
int *p = &a;
// 这里是初始化,表示的是指针初始化为a的地址,实际相当于 int *p; p = &a;
*p = 10;
// 这是表示对指针解引用,想p所指向的地址写入10
第2个是关于函数调用,一个函数在那里,并不会自己运行,只有你去调用它它才会运行。在函数调用发生时,C语言实际做的是用实际参数代替形参。
int *p;
func(p); // 在这里(函数调用)的时候,实际相当于有如下过程:int *a; a = p;(实参代替形参); *a = 10; 因此,这样操作是否有问题,关键在于p(实参)本身是否有问题。如果p本身指向了一个确切的地址,则a=p也使a(形参)实际指向了一个确切的地址,如果p本身没初始化,那么a = p 也使a实际指向了一个未初始化的地址。