
正文
c语言中的指针初始化吗,c函数指针初始化
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
c语言指针使用前必须初始化??
1、C语言规范没有要求,有的编译器实现会给个警告,有的直接编译过。定义指针后可以不初始化,但实际上这个指针变量中已经有一个值了(就是分给这个指针变量的地方内存中原来的值,假设是0x1234)。
2、不初始化也可以正确使用,只要在使用时正确赋值就可以,但是如果不初始化,则该指针为漂浮的指针,所指的地址不确定,而且指向的地址中的内容也不确定,如果乱用的话可能会影响其他程序的运行。
3、指针变量同普通变量一样,使用之前不仅要定义说明,而且必须进行初始化,指针的 初始值必须是一个地址,决不允许赋予任何其他数据, 通常是一个数据的地址或地址 变量或空指针。
4、因为指针不初始赋值的话会随机分配一个内存地址,如果后面的代码直接使用的话会出错,C编译器为了不让这种情况发生所以去检测有没有不初始化的指针,其实就是编译器搞得鬼。
5、所以指针使用前一定要记得先初始化。如果想要靠输入给指针初始化,那对应语句应该是scanf(%d, &ps);不过这样做实际没啥意义,这样做也挺危险。如果后面用这个指针往里面写内容可能会程序崩溃,甚至你的系统会崩溃。
相关问答
Q1: c语言程序指针问题
C语言10个小知识了解指针 若有代码,int a=10,*p;p是指针:也是一个变量,且是一个只能用来存放地址的变量。
C语言规定所有变量在使用前必须定义,指定其类型,并按此分配内存单元。指针变量不同于整型变量和其他类型的变量,它是用来专门存放地址的。必须将它定义为“指针类型”。
在这个程序中,我们首先提示用户输入方阵的尺寸,然后输入方阵的元素。接着,我们通过遍历方阵的每一行,并使用指针指向每行对应列的元素,来求出方阵对角线元素之和。最后,我们输出结果。
:char s[5]={A,B,C,D,E};这是个字符数组的初始化,没有问题,但它不是以字符串结束符\0结尾的,所以它不是字符串。
(1)malloc是C语言中的函数,而new是C++中的操作符。(2)malloc申请之后返回的类型是void*,而new返回的指针带有类型。
Q2: 指针要初始化吗
1、定义指针后可以不初始化,但实际上这个指针变量中已经有一个值了(就是分给这个指针变量的地方内存中原来的值,假设是0x1234)。
2、不初始化也可以正确使用,只要在使用时正确赋值就可以,但是如果不初始化,则该指针为漂浮的指针,所指的地址不确定,而且指向的地址中的内容也不确定,如果乱用的话可能会影响其他程序的运行。
3、指针申明的时候最好初始化。初始化以后的指针在一些操作下野会变成野指针,比如:free释放内存以后。指向被释放的内存的指针也是野指针。我理解的野指针就是不可控的,不确定指向的指针都是野指针。
4、在c语言中定义指针变量时是可以进行初始化的。指针变量的初始化可以在定义时或定义后进行,也可以在数组或结构体中作为元素进行初始化。
Q3: C语言指针的初始化!!!
void RegList(LB L)//初始化线性表(建立头结点,指针域置为空){ L=(LB )malloc(sizeof(LB));L-next=NULL;} 改成指针的指针 调用的时候RegList(&k);就行了。
数组指针初始化方法:int (*p)[4];char a[3][4];p=a;p=&a[0];p=a+1;p=&a[1]; //都正确 p=a[0]; //错误 p=a[1]; //错误。
null说明了 这个二级指针保存的是一个一级指针的地址,保存的地址是0;由于保护模式的缘故,(可自行查阅资料),ring3无法对保护段的内存进行读写,所以会出现运行时崩溃。
我一般喜欢用memset(p,0,sizeof(p));头文件是memory.h p-chEmail[i]=NULL;NULL是空指针,但是这么运算的时候会变成0。
Q4: c语言中字符指针声明后,没有做任何操作,系统是怎么初始化的?
初始化为空。即 char * str = NULL;的形式,NULL在C语言中是特定的空指针,其值为0.在C语言中,以NULL作为指针的一个未生效状态,其本身是一个非法的地址值。2 初始化为常量字符串地址。
C语言允许用字符串的方式对数组作初始化赋值。
中,指针变量p因没有初始化,在执行语句*p= x;之前p的内容是未知的,当程序将100赋给 一个没有确定指向内存的指针变量p,而使得数据100被存入一个未知的单元。
c语言中的指针初始化吗的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c函数指针初始化、c语言中的指针初始化吗的信息别忘了在本站进行查找喔。








