2014-03-07 21 views
0

我有一個C程序行爲 - Visual 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); 
} 

方案的編制提供了錯誤的只讀位置* P的

分配

在該行*p = 5;

爲什麼這個任務是j = 10;有效,並且*p = 5;是錯誤。

+3

你聲明'p'是一個'const int * p'。 'const'意味着你不打算改變'* p'的值。但你做了,所以得到了錯誤。 'j'被聲明爲'int j'。它不是'const',所以你可以改變它。 – lurker

+0

@mbratch這可能是重點,但djhaskin解釋得更清楚。 – Vinod

+0

[使用指針重複更改const int的值](http://stackoverflow.com/questions/20929551/changing-value-of-const-int-using-using-pointer?rq=1),[Const變量更改與指針在C](http://stackoverflow.com/questions/9371892/const-variable-changed-with-pointer-in-c),[混淆關於修改常量變量使用指針](http:// stackoverflow。 com/questions/21372713/confusion-about-modification-of-const-variable-using-pointers?rq = 1) – 2014-03-07 04:13:39

回答

5

const int *p的地址的內容意味着你不能修改p指向整數使用p,如*p = 5;。它指向的整數可能不是const int,這就是爲什麼j = 10有效。這可以防止編碼員修改被指向的整數。

2

const int的* P意味着你不能改變P中

這是你不能chanage * P

+0

Noob問題:爲什麼'p =&j'允許呢? – naomik

+0

@naomik改變函數定義爲void f(const * int * p),你也會得到這個錯誤,const * int p表示你不能改變p指向的地方 – michaeltang

0

const int意思是,它的值爲remain same,直到程序結束,所以你不能改變它的值。