未初始化指针问题

让人想犯罪 __ 提交于 2019-11-29 17:29:05

《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实际指向了一个未初始化的地址。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!