我的指针地址有问题。
类:
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 ++的新手;
答案 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类型值的位置。*