Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
常量int指针-C的行为_C_Pointers_Constants - Fatal编程技术网

常量int指针-C的行为

常量int指针-C的行为,c,pointers,constants,C,Pointers,Constants,我有一个C程序 #include<stdio.h> void f(const int* p) { int j; p = &j; j = 10; printf("Inside function *p = %d\n",*p); *p = 5; printf("Inside function *p = %d\n",*p); j = 7; printf("Inside function *p = %d\n",*p); } int main() {

我有一个C程序

#include<stdio.h>

void f(const int* p)
{
  int j;
  p = &j;
  j = 10;
  printf("Inside function *p = %d\n",*p);
  *p = 5;
  printf("Inside function *p = %d\n",*p);
  j = 7;
  printf("Inside function *p = %d\n",*p);
}

int main()
{
  int i = 20, *q = &i;
  f(q);
}
#包括
空f(常数整数*p)
{
int j;
p=&j;
j=10;
printf(“内部函数*p=%d\n”,*p);
*p=5;
printf(“内部函数*p=%d\n”,*p);
j=7;
printf(“内部函数*p=%d\n”,*p);
}
int main()
{
int i=20,*q=&i;
f(q);
}
编译程序时会出现错误

只读位置*p的分配

在第
*p=5行


为什么赋值
j=10有效且
*p=5是一个错误。

const int*p表示您不能更改p地址中的内容


也就是说,您不能更改*p

const int*p
意味着您不能修改
p
使用
p
指向的整数,如
*p=5。它指向的整数可能不是
const int
,这就是
j=10
工作的原因。这可以防止编码器修改指向的整数

const int意思是,它的值
在程序结束之前保持不变,所以您不能更改它的值。

您声明
p
const int*p
const
表示您不打算更改
*p
的值。但是你做到了,所以你犯了错误
j
声明为
int j
。它不是
const
,所以你可以修改它。@mbratch这可能是重点,但Djaskin解释得更清楚,.Noob问题:为什么
p=&j
允许呢?@naomik将函数定义更改为void f(const*int*p),你也会因此得到错误,const*int p意味着你不能更改p指向的位置