C语言 int * p; p=NULL;
C语言中int *p=NULL意思是:
C语言中p里面是随机值,在int *p=NULL,这个p是有值的,为NULL;
int *p=NULL指向一个空指针,等于 int *p=0; NULL等于0;
可以随时让这个p指向其他地址。定义指针,将它初始化为NULL,这样做编程更规范。
扩展资料
*p = NULL的作用
代表对一个由指针p指向的变量(什么类型,不知道),赋值为0,是将那个变量赋值为0。
int *p;
*p = NULL;
第一行代码,定义了一个指针变量p,其指向的内存里面保存的是int类型的数据;但是这时候变量p本身的值是多少不得而知,也就是说现在变量p保存的有可能是一个非法的地址。
第二行代码,给*p赋值为NULL,即给p指向的内存赋值为NULL;但是由于p指向的内存可能是非法的,所以调试的时候编译器可能会报告一个内存访问错误。这样的话,可以把上面的代码改写,使p指向一块合法的内存:
int i = 10;
int *p = &i;
*p = NULL;
C语言中int *p=NULL意思是:
C语言中p里面是随机值,在int *p=NULL,这个p是有值的,为NULL;
int *p=NULL指向一个空指针,等于 int *p=0; NULL等于0;
可以随时让这个p指向其他地址。定义指针,将它初始化为NULL,这样做编程更规范。
扩展资料
*p = NULL的作用
代表对一个由指针p指向的变量(什么类型,不知道),赋值为0,是将那个变量赋值为0。
int *p;
*p = NULL;
第一行代码,定义了一个指针变量p,其指向的内存里面保存的是int类型的数据;但是这时候变量p本身的值是多少不得而知,也就是说现在变量p保存的有可能是一个非法的地址。
第二行代码,给*p赋值为NULL,即给p指向的内存赋值为NULL;但是由于p指向的内存可能是非法的,所以调试的时候编译器可能会报告一个内存访问错误。这样的话,可以把上面的代码改写,使p指向一块合法的内存:
int i = 10;
int *p = &i;
*p = NULL;
2. stdlib.h中已经定义了NULL,没必要再写
3. 有必要。如果不给p赋值NULL,那么p的值是undefined, 不一定是多少,有可能指向已经使用的内存。这时候如果给*p赋值,可能会造成破坏。如果p=NULL,就不可能给*p赋值,减少误操作的机会。
1:0和NULL不一样,0可以只数字0,也可以指字符0,NULL指的是空。
2:p=NULL;这一句的意思就是令P指向空地址
3:如果最后不写p=NULL;的话就要释放p.像这样free(p);,不这么做的话就有可能出现指针乱跳转的危险
关于无效值在不同的环境有不同的定义,大多是0,而有的是0xFFFFFFFF,
编译代码换了环境后而通过宏定义NULL,在利用NULL的代码中就不用再修改,而是直接修改宏定义
这是指针啊,如果是直接将0赋值给p也可以直接写int p;p=0;
1. 这是习惯写法。一般都把NULL定义成(void *)0,如果直接p=0;编译器会告警,说把一个整型赋给一个指针型。
2. NULL一般都用于表示空指针,p=NULL就表示把p指向一个无效空间地址
3. p指向NULL的无效空间地址后,对这个地址赋值就是非法的。只有把p指向一个有效地址空间才可以对它指向的内存写入内容,即可执行*p=XX操作。
笪习乌洛: 我用vs测试了一下.你这是定义,不是运算.两种是一样的.int main() {int a=3;int *p=&a; printf("a=%d,*p=%d,p=%x\n",a,*p,p); p=NULL; p=&a; printf("a=%d,*p=%d,p=%x\n",a,*p,p);return 0; } 输出: a=3,*p=3,p=1aef48 a=3,*p=3,p=1aef48
寒亭区17014104158: C语言中定义int c[4][5],(*p)[5];p=c;其中p、p[0]、*p有什么区别? - ?
笪习乌洛: 这个不太好理解啊!第一个int c[4][5]是二维数组, 可以理解为有4个元素的数组,其中百每个元素又是5个整数的数组.第二个int (*p)[5]是数度组指针回, p是一个指针, 它指向的是int [5],即5个整型, 这时p++是增加20个偏移.与int *p[5]不同; p ...
寒亭区17014104158: c语言里面关于指针的例如int *p p *p 都代表什么~? - ?
笪习乌洛: 比如:int num, *p=num 那么int *p 就等于定义了一个指针变量,并且指向了num 至于p那就是存放了num在内存中的地址 *p就等于使用num,比如你可以num=1,也可以*p=1,他们的效果相同
寒亭区17014104158: 关于c语言指针.比如char a[3];然后int *p;p=(int *)&a[2];现在这个指 - ?
笪习乌洛: 指向a[2],就是数组a的第三个元素的地址.&a[2]就是a[2]的地址,前面的(int *)是强制类型转换,把地址转换成(int *)类型,再赋值给p.
寒亭区17014104158: C语言 指针中*p=&n; ,是什么意思呢,和*p,p=&n;,有什么区别和关系呢?在什么情况下可以用*p=&n呢 - ?
笪习乌洛: *p=&n这个只能是在定义指针p时使用,例如int *p=&n. 而p=&n,是在已经定义好指针p的前提下用,例如:int *p; p=&n; 如果给指针P赋值,是不可以用*p=&n的,因为此时*p代表它所指向的变量的值.
寒亭区17014104158: C语言中int * p;的含义 - ?
笪习乌洛: 在c语言中 * 是指针运算符. *p表示指针变量p所指向的变量的值.即p中存储的内存地址 所存储的变量的值. 另外 容易混淆的地方是; 定义一个指针变量p时,如 int *p; 表示定义了一个指向整型变量的指针变量p. 望采纳.
寒亭区17014104158: int* p; p=new int;什么意思 - ?
笪习乌洛: 还有new int[]; []里还有一些其他的整型数的吧 C和C++都兼容的,这个是C++关键字,申请内存的意思 和malloc()函数是一样的 int *p;p=new int[10];等价于: int *p;p=(int *)malloc(10*sizeof(int));
寒亭区17014104158: C语言中int *(*p)()是什么含义?? - ?
笪习乌洛: 1int* (*p)(); 声明了一个指向『"接受void参数,返回int*"的函数』的指针
寒亭区17014104158: c语言中 int *p; 是管p叫指针变量,还是管*p叫指针变量? - ?
笪习乌洛: p叫指针变量.int *p,其实int *是一部分,p是后半部分
寒亭区17014104158: c语言 语句“int (*p)();”的含义是 - ._?
笪习乌洛: 选d.