指針轉換

指針轉換

今天在看hotspot代碼時,有處沒能看明白,因而請教青老師,給出瞭解答是指針轉換的語法ios

share/vm/memory/defNewGeneration.cpp DefNewGeneration::collect
share/vm/memory/genOopClosures.inline.hpp FastScanClosure::do_oop_work
share/vm/memory/defNewGeneration.cpp DefNewGeneration::copy_to_survivor_space
share/vm/oops/oop.inline.hpp forward_to::forward_to
markOop.hpp
src/share/vm/oops/markOop.hpp
  // Prepare address of oop for placement into mark
  inline static markOop encode_pointer_as_mark(void* p) { return markOop(p)->set_marked(); }

就是上面markOop(p) 這個寫法當時沒看懂,他不是什麼方法調用,也不是什麼構造函數,而是指針轉換。
青老師給我寫了一小段demo以下:函數

#include<iostream>
using namespace std;

struct A {
  int a;
  int b;
};

typedef A* APtr;

int main(){
  A a;
  a.a=10;
  a.b=20;
  void *q = (void*)&a;
  APtr p = APtr(q); // 指針轉換
  cout<<p->a<<","<<p->b<<endl;
}
相關文章
相關標籤/搜索