我不明白为什么println是*p1.offset(0)
给我0。有什么想法吗?
fn main() {
let p1 : *const u8 = vec![17u8,2u8].as_ptr();
let p2 : *const u8 = "123".as_ptr();
unsafe{
println!("{}", *p1.offset(0) as u8);//should get 17, but I get 0
println!("{}", *p2.offset(0) as char);
}
}
这是游乐场的链接。https://play.rust-lang.org/?version=stable
这是一个工作版本。
fn main() {
let data = vec![17u8,2u8];
let p1 : *const u8 = data.as_ptr();
let p2 : *const u8 = "123".as_ptr();
unsafe{
println!("{}", *p1.offset(0) as u8); // not get 17 instead of 0
println!("{}", *p2.offset(0) as char);
}
}
我不知道为什么需要提取向量来分离变量
指针并不拥有它们所指向的对象,所以当你这样做时:
let p1 : *const u8 = vec![17u8,2u8].as_ptr();
发生的事件顺序是:
Vec
,在堆上分配了一个缓冲区Vec
被丢弃,因为没有任何东西拥有它,因此缓冲区被释放。第二种情况工作正常:
let p2 : *const u8 = "123".as_ptr();
因为“123”是字符串文本,而字符串文本具有“静态
生存期 ” - 它们的持续时间与程序本身一样长。
6. 指向指针的指针与指针数组 指针可以指向基本类型,也可以指向复合类型,因此也可以指向另外一个指针变量,称为指向指针的指针。 int i; int *pi = &i; int **ppi = π 这样定义之后,表达式*ppi取pi的值,表达式**ppi取i的值。请读者自己画图理解i、pi、ppi这三个变量之间的关系。 很自然地,也可以定义指向“指向指针的指针”的指针,但是很少用到: int
指针可以指向一份普通类型的数据,例如 int、double、char 等,也可以指向一份指针类型的数据,例如 int *、double *、char * 等。 如果一个指针指向的是另外一个指针,我们就称它为 二级指针,或者 指向指针的指针。 假设有一个 int 类型的变量 a,p1是指向 a 的指针变量,p2 又是指向 p1 的指针变量,它们的关系如下图所示: 将这种关系转换为C语言代码: 指针变
但我想使用一个指针,而不是一个简单的变量。能给我点启示吗? 谢谢
在下面给出的代码中,我声明了一个指向int的指针,我们都知道memcpy返回一个指向目标字符串的空指针,所以如果ptr是指向int的指针,那么为什么printf(“%s”,ptr);是完全有效的,ptr毕竟不是指向char的指针。
问题内容: 我是Java菜鸟。我已经掌握了将C / C ++指针转换为Java引用的概念,并且进展相当顺利。 我打了一段有指针的代码(即* ptr)。我需要取消引用指针并更改其指向的指针的值(即 ptr =&newthing;) 在Java中这似乎要困难得多。是否有人对如何解决此问题有任何想法?快速谷歌搜索什么都没有。 这是C ++中的代码示例。我想在Java中获得类似的工作,但是ptr_to_p
本文向大家介绍什么是指向指针的指针? 相关面试题,主要包含被问及什么是指向指针的指针? 时的应答技巧和注意事项,需要的朋友参考一下 指针指向的变量是一个指针,即具体内容为一个指针的值,是一个地址. 此时指针指向的变量长度也是4位.