extern "C" void example_func(int32_t arg) {
library_func(arg);
}
extern "C" {
fn example_func(arg: i32);
}
fn call_example_func(arg: i32) {
unsafe {
example_func(arg);
}
}
Не интересно для себя
И то чаще переделываю чужие под задачу, а не с нуля что-то делаюА я и не говорил про "с нуля", сейчас столько средств собрать проект из кусочков и это как нестранно тоже программирование.
let mut x = 0;
let r = &x;
println!("{r}");
let r = &mut x;
*r = 1;
let r = &x;
println!("{r}");
struct Example<'a> {
value: &'a u32,
}
impl<'a> Drop for Example<'a> {
fn drop(&mut self) {}
}
let mut x = 0;
let ex = Example { value: &x };
let r = &mut x; // ошибка, эта ссылка не уникальна
На диаграммах изображена структура формата указатель, длина и вес (это хранится в куче), а уже указатель ссылается на память в стеке в случае строкового литерала или любого числа, и на кучу если это String - это понятно.
Но в таком случае должна была бы вернуться стуктура побайтово, то есть указатель, длина и вес, а возвращаются данные на которые указатель указывает, поэтому я запутался.Вы так и не показали, на чём вызываете метод.
use as_bytes::AsBytes as _;
#[repr(C)]
struct Example {
a: u8,
b: u8,
c: u8,
d: u8,
}
let example = Example {
a: 1,
b: 2,
c: 3,
d: 4,
};
let example_bytes = unsafe { example.as_bytes() };
println!("{example_bytes:?}"); // [1, 2, 3, 4]
то есть она возвращает слайс байт, то как структура в памяти выглядит