c语言指针的初始化,c语言指针的声明与初始化

1 , c语言指针的声明与初始化c语言中,声明一个指针数组,char *s[1024 ],但并没有对它初始化,那它里面的数据(指针)是不确定的!如果是全局变量,则里面的指针全是空指针如果是局部变量 , 则里面的数据是不确定值,就象普通数组和变量一样,是不确定的数值 。【c语言指针的初始化,c语言指针的声明与初始化】
2,C语言结构体指针变量初始化void RegList(LB *L)//初始化线性表(建立头结点,指针域置为空) L=(LB *)malloc(sizeof(LB)); L->next=NULL;}改成指针的指针 调用的时候RegList(&k);就行了 。void RegList(LB **L)*L = (LB*)malloc(sizeof(LB));(*L)->next = NULL;}
3 , C语言 指向指针的指针变量的初始化楼上的回答编译器是不允许通过的 。程序员无权给指针直接赋常量值 。int a =2;int * p = &a;int **q = &p;//指向指针的指针变量初始化;int * i,j,k =&a;int *r[3] = { i,j,k};//指针数组初始化 。如:int *p=90001;int **q=p;int *r[3]={90001,90002,90003};指针指向变量后才能操作,如:int *pt,a;pt=&a;*pt=5;第二个char *i;i="hello";这样是正确的.
4,C语言 如何初始化指针数组 比如char dd5char 指针 , 也就是char *类型 。其初始化本质上与其它变量初始化没有什么区别,就是赋予其一个初始化的值 。对于指针来说,在C语言中,就是一个地址 。区分初始化情况,有四种表象:1 初始化为空 。即char * str = NULL;的形式,NULL在C语言中是特定的空指针,其值为0.在C语言中,以NULL作为指针的一个未生效状态,其本身是一个非法的地址值 。2 初始化为常量字符串地址 。char * str = "test";常量字符串在运行时会被放在常量空间中,于是这样初始化后,地址是常量空间中的一个地址,对于该地址只能读取 , 不可写入 。即str的值可以改,但是str指向的值是不可修改的 。3 初始化为变量地址 。这里的变量地址 , 包括全局变量,局部变量的地址,以及通过动态分配申请到的内存地址 。这种情况下,对指针指向的空间是可以修改的 。4 不做初始化 。这种情况在C语言中是允许的 。如果为全局变量或静态局部变量,系统默认初始化为0值,即NULL 。而对于局部变量,将是一个随机值 。所以如果是局部变量不做初始化,在取其指向空间值前,必须为其指定一个合法的值,否则访问会出错 。short i;for(i=0;i<5;i++)dd[i] = (char *)malloc(sizeof(char));}char *dd[5]=再看看别人怎么说的 。5 , c语言指针初始化指针申明的时候最好初始化 。。初始化以后的指针在一些操作下野会变成野指针,比如:free释放内存以后 。。指向被释放的内存的指针也是野指针 。。我理解的野指针就是不可控的,不确定指向的指针都是野指针 。注意了,a只是一个双重指针,不是数组 。还有new这个东西是C++中的 。C中用malloc分配内存,再初始化 。第一个,指针变量是局部变量,且没有正确赋值,是一个野指针第二个,指针变量是形参,在函数调用中就吧实参值传给形参了,所以实际上指针p是有被正确赋值的(当然此处假设是调用正确的情况下),不是野指针指针指向变量后才能操作,如:int *pt,a;pt=&a;*pt=5;第二个char *i;i="hello";这样是正确的.int array[4][5][6];int (*pa)[4][5][6] = &array;//一级指针 , 指针向一个数组,该数组为int [4][5][6]int (**a)[4][5][6] = &pa;//二级指针 , 指向上一行的一级指针 对于动态分配的结构,不可能用数组这种形式来存储的 。因为数组的下标必须在编译时刻明确为常量 。楼主用的C++,可以考虑用STL的vector 。另外,我觉得本身用维度这么大的数组就不是很合适,应该换别的方式 。

    推荐阅读