C语言中,*p=20;这样的赋值 合法吗?为什么老谭的书说其不合法呢!
发布网友
发布时间:2024-10-17 15:15
我来回答
共4个回答
热心网友
时间:2024-10-31 17:36
这个没有任何声明或定义,没法说是不是合法
如果之前是这样定义的 int *p;
即你定义p是一个指向int型的指针,肯定是合法的(注意,我只是说合法,没说是正确的,合法只是说符合C语法的基本要求,可以通过编译,但不代表运行不会出错)
谭书中,说这是错的(严格的说法是符合语法,但是运行会出错),那是因为这里的p是一个野指针,说白了,就是指向不确定,可能指向任何地址,如果你随意的修改这个地址的内容的话,会有极其严重的后果
热心网友
时间:2024-10-31 17:33
举两个例子
int a;
int *p=&a;
*p=20;
这样是合法的
int *p;
*p=20
这样是不合法的
也就是指针必须有明确的指向,如第一个例子;否则它指向的地址空间是不确定的,如第二个例子,给这样的指针赋值,可能修改内存中的重要数据,因此非法。
热心网友
时间:2024-10-31 17:38
*p=20表示将整数20赋给p当前所指的变量,单看这个语句是合法的,但p所指的变量类型不同,会造成他的合法性的不同
热心网友
时间:2024-10-31 17:31
老谭是怎么说的?是不是范断章取义错误了啊,如果p是个未定义的指针变量的话,直接赋值当然是不合法且危险的,如果p指针有定义指向怎么会不合法