首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

地址运算有关问题

2012-03-04 
地址运算问题,求助#include stdio.h#include iostreamusing namespace stdvoid process_keys12 (int

地址运算问题,求助
#include <stdio.h>
#include <iostream>
using namespace std;
void process_keys12 (int * a1, int * a2) {
  cout<<"//////////////////process-before"<<endl;
  cout<<"a1=="<<a1<<endl;
  cout<<"*a1=="<<*a1<<endl;
  cout<<"a1 + *a1==="<<a1 + *a1<<endl;
  cout<<"(int *) (a1 + *a1)==="<<(int *) (a1 + *a1)<<endl;
  cout<<"*((int *) (a1 + *a1))==="<<*((int *) (a1 + *a1))<<endl;
   
  cout<<"*a2=="<<*a2<<endl;
cout<<"a2=="<<a2<<endl;
*((int *) (a1 + *a1)) = *a2;
cout<<"//////////////////process-after"<<endl;
cout<<"*a1=="<<*a1<<endl;
  cout<<"a1=="<<a1<<endl;
cout<<"a1 + *a1=="<<a1 + *a1<<endl;
  cout<<"(int *) (a1 + *a1)=="<<(int *) (a1 + *a1)<<endl;
  cout<<"*((int *) (a1 + *a1)=="<<*((int *) (a1 + *a1))<<endl;
  cout<<"*a2=="<<*a2<<endl;
cout<<"a2=="<<a2<<endl;
 
}

int main()
{
  cout<<"//////////////////main"<<endl;
  int key1=0;
  int key2=10;
  int * p1=&key1;
  int *p2=&key2;
  cout<< key1<<endl<<key2<<endl<<p1<<endl<<p2<<endl;
  process_keys12(p1,p2);
  cout<<"//////////////////main"<<endl;
  cout<< key1<<endl<<key2<<endl<<p1<<endl<<p2;
   
  system("PAUSE");
  return 0;

  }

能不能说下函数process_key12的运算过程啊~~~当key1,key2值有变的时候,总有很奇怪的变化!谁能帮忙解释下

[解决办法]
void process_keys12 (int * a1, int * a2) {
cout < <"//////////////////process-before" < <endl;
cout < <"a1==" < <a1 < <endl; key1地址
cout < <"*a1==" < <*a1 < <endl; key1
cout < <"a1 + *a1===" < <a1 + *a1 < <endl; key1的地址+sizeof int * key1
cout < <"(int *) (a1 + *a1)===" < <(int *) (a1 + *a1) < <endl; 还是 key1的地址+sizeof int * key1
cout < <"*((int *) (a1 + *a1))===" < <*((int *) (a1 + *a1)) < <endl; key1的地址+sizeof int * key1 的值 这里key1为0,所以为key1的值

cout < <"*a2==" < <*a2 < <endl;
cout < <"a2==" < <a2 < <endl;
*((int *) (a1 + *a1)) = *a2; 将key1改为10
cout < <"//////////////////process-after" < <endl;
cout < <"*a1==" < <*a1 < <endl; 与前面一样
cout < <"a1==" < <a1 < <endl; 与前面一样,key1的新值
cout < <"a1 + *a1==" < <a1 + *a1 < <endl; key1的地址+sizeof int * key1
cout < <"(int *) (a1 + *a1)==" < <(int *) (a1 + *a1) < <endl; 与前面一样
cout < <"*((int *) (a1 + *a1)==" < <*((int *) (a1 + *a1)) < <endl; 这是一个随机值
cout < <"*a2==" < <*a2 < <endl;


cout < <"a2==" < <a2 < <endl; 
}
[解决办法]
分清楚两点:

指针变化,还是 指针指向的值变化

热点排行