主要有三种首先,当指针所指向的内存被释放后,如果我们没有及时将指针置为NULL,那么这个指针就仍然存储着已经被释放的内存地址,是一个野指针。其次,如果我们在定义指针时没有及时进行初始化,那么这个指针就会包含一个随机的、不确定的值,它可能指向任何内存地址,从而可能引发不可预测的错误。最后,如果我们对指针的操作...
一个指针指向一个对象时,这个指针的值就是对象的内存地址。当你释放对象后,这个地址就无效了,如果你继续用这个地址去访问,就会产生非法访问了。而对于指向对象的指针来说,对象被释放,只是代表着指针的值变得无效,但对指针本身来就并没有什么变化,只要你不拿着这个无效的指针值去访问内存,就不会...
#includemain(){ int arr[ ]={30,25,20,15,10,5}, *p=arr;p ;printf( }运行结果为:10首先定义一个整型数组arr,并对arr进行初始化; 然后定义整型指针变量p; 再将数组arr的地址赋给p。因此此时p中存放的数组arr的首地址,即数组中第一个元素a[0]的地址。执行p ,即p=p 1。p 1表示以p当前所指向的...
const关键字(1)const修饰变量,可以使变量具有常属性,在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了; (2)对指针来说,可以指定指针本身为const,分为顶层const(指针本身是const)和底层const(指针所指向的内容为const); (3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,...
1:3首先定义一个整型数组a,并对a进行初始化; 然后定义整型变量x,y,整型指针变量p; 再将数组a的地址赋给p。因此此时p中存放的数组a的首地址,即数组中第一个元素a[0]的地址。执行x=*( );p 2表示以p当前所指向的位置起始,之后第2个元素的地址,即a[2]的地址。*( )则表示该地址内所存放的内容,即a[...
然后再以字符串%s的形式输出以p中地址为首地址的整个字符串,此时p指向s[1],即从s[1]开始,依次输出后面的字符串,因此又输出BCD执行完循环体,转向执行表达式3,即p= p+1。p+1表示以p当前所指向的位置起始,之后1个元素的地址,即s[2]的地址,然后将a[2]的地址赋给p。s[2]的地址等...