将指针的地址转换为字符串并将字符串地址分配给指针?

时间:2015-10-20 04:33:15

标签: c++ pointers

我的指针地址有问题。

类:

apply plugin: 'com.android.application'
android {
     compileSdkVersion 23
     buildToolsVersion "23.0.1"

   defaultConfig {
      applicationId "com.example.mymaterialdialogs"
      minSdkVersion 15
      targetSdkVersion 23
      versionCode 1
      versionName "1.0"
    }
    buildTypes {
         release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
         }
    }
}
dependencies {
  compile fileTree(dir: 'libs', include: ['*.jar'])
  testCompile 'junit:junit:4.12'
  compile 'com.android.support:appcompat-v7:23.0.1'

  compile('com.afollestad.material-dialogs:core:0.8.4.2@aar') {
      transitive = true
  }
}

我想获取名称类的指针的地址并将其转换为字符串

buildscript {
   repositories {
      maven { url "https://jitpack.io" }
   }
   dependencies {
      classpath 'com.android.tools.build:gradle:1.3.0'
   }
}
allprojects {
   repositories {
       jcenter()
   }
}
task clean(type: Delete) {
   delete rootProject.buildDir
}

我该怎么办?我是c ++的新手;

2 个答案:

答案 0 :(得分:1)

要获取指向名称类的指针地址的字符串,只需编写:

name* p = new name(); // pointer to name class
const char* add = reinterpret_cast<const char*>(&p);
std::string str = add;

您可以通过以下几种方式检索对象的地址:

type* pntr = &object;

在上面的例子中,pntr现在是对象的地址。 &amp;符号,当在语句的右侧使用时,指定您想要一个地址。当在声明的左侧使用时,&amp;指定对另一个对象的引用:

type& ref = object;

在此示例中,ref现在是对象的引用。将ref设置为等于另一个值将设置对象等于该值。

当你有一个指针,并且你想要那个指针指向的对象时,只需使用*符号取消引用指针:

type* pntr = &object; // pntr is the address pointing to object
std::cout << *pntr << std::endl; // dereferences pntr to retrieve object

与@vishal一样,q = add会抛出错误,因为您要将 const char * 分配给名称* 。你不能直接将一种类型的指针分配给另一种类型的指针。另外,抛弃const并不被认为是不好的做法,但你必须绝对确定你知道自己在做什么。但是,在c ++中使用C风格的强制转换被认为是不好的做法。如果你想要施放,你应该使用以下之一:

static_cast<type*>(pointerToSomeOtherType);
reinterpret_cast<type*>(pointerToSomeOtherType);
const_cast<type*>(pointerToSomeOtherType);
dynamic_cast<type*>(pointerToSomeOtherType);

不是

(type*) pointerToSomeOtherType;

答案 1 :(得分:0)

如果要打印指针的地址,请使用&amp;。

变化:

printf("%s \n",add);

为:

printf("%p \n",&add);

或者更好地使用cout //因为这个问题被标记为c ++

cout<<&add;
  

我想指定q的地址指向p。间接通过添加。

你不能这样做:

 q = add; // name * and const char ** are different pointer types.

您可以通过将q转换为名称*

来指定q作为参考添加
q= (name *) &add;  // not a good practice 
cout<<q<<endl;

这对于转换const char *不是一个好习惯,因为:

const char 是一个指针,其值也可以更改,指向包含无法更改的char类型值的位置。*