C++指针和作用域的问题

 

一个C++的例子,关于指针,课件上的表述:

不能通过指针来改变所指对象的值,但指针本身可以改变,可以指向另外的对象。
例1
char *name1 = "John";    //name1是一般指针
*name1='A';    //编译正确,运行出错
例2
const  char *name1 = "John";  //指向常量的指针
char s[]="abc";
name1=s;      //正确,name1本身的值可以改变
*name1='1';  //编译时指出错误


课件上说*name1='A'是错误的,只能通过修改指针指向的对象来改变指针指向的值,实际上这个说法是错误的,见下例:
不能通过指针来改变所指对象的值,但指针本身可以改变,可以指向另外的对象。
#include <iostream.h>

int m; float k;
void  splitfloat(float a, int *intpart, float *fracpart)
{  //形参intpart、 fracpart是指针
   m=(int)a;
  
   *intpart=m;
   k=a-(int)a;
   // 取x的整数部分
   *fracpart=k; //取x的小数部分

}
int main()
{
 int i, n;
// float k;
 float x,f;
// int i=(8&3); 
// cout<<i<<endl;
    for (i = 0; i < 3; i++)
 {
  cin >> x;
  splitfloat(x,&n,&f);       //变量地址做实参
 // cout <<"Integer Part is "<<n<< "Fraction Part is <<f<< endl;
  cout<<n<<" "<<f<<endl;
 }
 return 0;
}
输入1.56,可以分别输出整数部分和小数部分

我又按照课件的逻辑修改了程序,将程序改为。
#include <iostream.h>

int m; float k;
void  splitfloat(float a, int *intpart, float *fracpart)
{  //形参intpart、 fracpart是指针
   m=(int)a;
  
   intpart=&m;
   k=a-(int)a;
   // 取x的整数部分
   fracpart=&k; //取x的小数部分

}
int main()
{
 int i, n;
// float k;
 float x,f;
// int i=(8&3); 
// cout<<i<<endl;
    for (i = 0; i < 3; i++)
 {
  cin >> x;
  splitfloat(x,&n,&f);       //变量地址做实参
 // cout <<"Integer Part is "<<n<< "Fraction Part is <<f<< endl;
  cout<<n<<" "<<f<<endl;
 }
 return 0;
}
输入1.56,输出的是两个极小的负数,我分析了出现这个问题的原因,不能通过修改常量的内存地址来修改常量的值,这是因为常量不存在取值符号*的操作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值