常量int指针-C的行为
我有一个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() {
#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地址中的内容
也就是说,您不能更改*pconst 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指向的位置