考虑下面的C代码声明。
int (*p)[10];
如果变量没有初始化到任何地址,那么以下哪一项可能会产生运行时错误?
1.第一个月
(p+1)[2]
p[2]
*p[2]
我的答案是:2,3,4。
由于p没有初始化,它可以包含任何垃圾值,因此*(p+3)
、*(p+2)
和**(p+2)
可能导致非法内存访问。
给出的答案:4.
他们的解释是:如果我们试图访问一些无效的内存,我们会得到一个运行时错误(分段错误)。是一个指向大小为的整数数组的指针。它的声明有一个 *(星号)和一个[](方括号)。如果我们想使用来访问内存,那么我们必须使用两个 *(星号)或者一个 *(星号)和一个[](方括号)或者两个[](方括号)。
以下用法可能会产生运行时错误-
**p
*p[]
p[][]
2和3是否会导致非法内存访问?
1条答案
按热度按时间wwwo4jvm1#
一般来说没有或者全部都有。一切都取决于你如何使用它。
示例:
1.如果在
sizeof
中使用它是安全的2.其中任何一个都可能导致未定义的行为(可以表现为内存故障)