首页 > 试题广场 >

【单选】以下代码的输出结果是什么? int main() {

[单选题]
以下代码的输出结果是()
int main() {
    int n = 10;
    int const *p = &n;
    p++;
    printf("%d", *p);
    return 0;
}





  • 10
  • 11
  • 随机值
  • 编译错误
我以为是指针常量呢…… 百度到的说 int const *p const int *p 都是指向常量的指针(常量指针) 而指针常量是 int * const p,这个才是不能改指针
发表于 2021-02-02 10:17:18 回复(0)
就近原则,int const *p = &n;修饰的是*p,即指针类型,能修改指针指向的地址,但是不能修改指针指向地址的值。
存放p的地址假设是0Xff01;    p = &n, *p = 10;
p++ 后指针指向的地址 + 1,(由于是int类型,实际是加4) p = 0Xff05;
此时的p指向的地址0Xff05,该地址的值不确定,所以*p是随机值
发表于 2022-03-05 20:52:46 回复(2)
const修饰*p;表示*p的内容不可以直接被修改,但是指针p指向的地址可以被修改,p++表示p指向了一个随机地址所以*p值变为了随机值
发表于 2021-07-09 14:47:09 回复(0)
以*为界限,在*外,如int const*p,const修饰地址指向的值,即地址可变,地址指向的值不可变; 在*内,如int *const p,const修饰的是地址,即指针常量。
发表于 2021-04-02 01:50:56 回复(0)
p指向n的地址,p++未定义值,所以为随机值
发表于 2020-09-08 08:10:34 回复(0)
*为界限,在*外,如int const*p,const修饰地址指向的值,即地址可变,地址指向的值不可变; 在*内,如int *const p,const修饰的是地址,即指地址不可变,但是值可变
发表于 2023-03-09 14:07:45 回复(0)
这是一个指针常量,指向一个常量值,所以p++之后,会变成一个随机值输出
发表于 2024-02-02 21:47:38 回复(0)
在这段代码中,指针`p`被声明为指向常量整数的指针,即它指向的整数值不能被修改。然后,`p++`操作使指针`p`指向了下一个整数,但这个整数的值是不确定的,因为指针`p`指向了无效的位置,这是未定义行为。

当程序试图访问这个无效地址上的值时,会导致程序产生异常行为,可能会导致崩溃。因此,这段代码的行为是未定义的,输出结果是不确定的。在不同的编译器和机器上,这个程序可能会产生不同的结果。所以选择C
发表于 2023-11-18 23:39:15 回复(0)
*为中,const左定值,右定址。
发表于 2022-11-15 13:06:51 回复(0)
int const *p ->常量指针:指针指向常量,即指针指向的变量的值不可以改变不,指针自身可以改变

常量指针 : int const *p 或 const int * p
指针常量 : int * const p 
发表于 2022-08-13 12:00:06 回复(0)
从左往右看,跳过类型,看const修饰的字符。
如果是*,说明指针指向的内存不能改变,这就是常量指针。
如果是指针变量,说明指针的指向不能改变,即指针的值不能改变,这就是指针常量。
发表于 2022-03-24 14:40:56 回复(0)
 int const *p = &n 等价于  const int *p = &n (const都在*左边,故p是一个常量指针);
但是p++行为未定义的,故*p值是随机值。
发表于 2022-03-04 10:40:07 回复(1)