Tag: 指针

使用boost :: shared_ptr时有什么潜在危险?

当使用boost::shared_ptr时,有什么方法可以在脚下boost::shared_ptr ? 换句话说,我使用boost::shared_ptr时必须避免哪些缺陷?

在C ++中声明

据我所知,C ++中的声明/初始化是带有“基本types”的语句,后面跟着逗号分隔的声明列表。 考虑下面的声明: int i = 0, *const p = &i; // Legal, the so-called base type is 'int'. // i is an int while p is a const pointer to an int. int j = 0, const c = 2; // Error: C++ requires a type specifier for all declarations. // Intention was to […]

取数组地址时的不同指针的算术结果

程序: #include<stdio.h> int main(void) { int x[4]; printf("%p\n", x); printf("%p\n", x + 1); printf("%p\n", &x); printf("%p\n", &x + 1); } 输出: $ ./a.out 0xbff93510 0xbff93514 0xbff93510 0xbff93520 $ 我期望以下是上述程序的输出。 例如: x // 0x100 x+1 // 0x104 Because x is an integer array &x // 0x100 Address of array &x+1 // 0x104 但是最后一个陈述的结果与我预期的不一样。 &x也是数组的地址。 因此,递增1将打印地址递增4.但是&x+1给出地址递增10.为什么?

为什么反引用操作符(*)也用来声明一个指针?

我不确定这是否是一个适当的编程问题,但这一直是困扰着我的东西,我想知道我是否是唯一的问题。 最初学习C ++时,我理解了引用的概念,但是指针让我感到困惑。 你为什么问? 由于你如何声明一个指针。 考虑以下: void foo(int* bar) { } int main() { int x = 5; int* y = NULL; y = &x; *y = 15; foo(y); } 函数foo(int*)接受一个int指针作为参数。 因为我已经将y为int指针,所以我可以将y传递给foo ,但是当第一次学习C ++时,我将*符号与解引用关联起来,因此我认为需要传递一个取消引用的int 。 我会尝试将*y传递给foo ,这显然不起作用。 拥有一个单独的运算符来声明一个指针会不会更容易? (或取消引用)。 例如: void test(int@ x) { }

利用代码中的指针的解释

在获取root shell的一些漏洞攻击中,我经常看到这样一个指针: int i; unsigned *p = *(unsigned**)(((unsigned long)&i) & ~8191); 任何人都可以解释一下这个指针吗? 我认为8191是内核堆栈的大小。 p指向内核栈的底部? 这里是如何使用指针p : int i; unsigned *p = *(unsigned**)(((unsigned long)&i) & ~8191); for (i = 0; i < 1024-13; i++) { if (p[0] == uid && p[1] == uid && p[2] == uid && p[3] == uid && p[4] == gid && […]

为什么有些人比“const T&”更喜欢“T const”?

所以,我意识到const T&和T const&是相同的,都是指const T的引用。在这两种情况下,引用也是常量(引用不能像指针那样被重新赋值)。 我观察到,在我有限的经验中,大多数C ++程序员使用const T& ,但是我遇到了一些使用T const& 。 我使用const T&只是因为我是这样学习的,所以T const&对我来说看起来有点儿滑稽。 您使用您使用的变体的原因是什么? 你们中的任何一个人是否在编码标准要求使用一种变体的组织中工作? 编辑 根据这些答案,看起来两者之间select的一个原因是你想要像编译器(从右到左)还是像英语(从左到右)那样阅读它。 如果像编译器那样读取它,那么“T const&”读作“&(引用)const(对于常量)T(typesT)”。 如果从左到右读一个英文的话,那么“const T&”被读作“一个引用forms的T类常量对象”。 我喜欢像英文散文一样阅读它,但我当然可以看到编译器的解释方式。 没有人回答这个组织或者编码标准问题,但是我强烈怀疑大多数组织并没有强制要求,尽pipe他们可能会争取一致。

函数名前的星号函数是什么?

我一直困惑于我看到的大多数C程序有我不熟悉的函数声明。 void *func_name(void *param){ … } *暗示的function是什么? 我对variablestypes( * )的理解是,它创build了一个指向另一个variables的指针,因此它能够跟踪后面variables存储在内存中的地址。 但是在这个函数的情况下,我不知道这个*星号意味着什么。

在c ++中返回一个指向vector元素的指针

我有一个全球范围内的myObjectsvector。 我有一个方法,使用std::vector<myObject>::const_iterator来遍历向量,并做一些比较来find一个特定的元素。 一旦我find了所需的元素,我想能够返回一个指针(vector存在于全局范围内)。 如果我返回&iterator ,我是否返回迭代器的地址或迭代器指向的地址? 我是否需要将const_iterator回myObject,然后返回该地址?

指针算术

有没有人有指针算术的好文章或解释(博客,例子)? 图中的观众是一群学习C和C ++的Java程序员。

这个错误是什么意思:“错误:在'type_name'之前预期说明符 – 限定符列表”?

我一直在处理单元处理器,我试图创build一个结构,将持有一个spe_context_ptr_t ,将用于线程内启动一个spe上下文,还将持有一个指向其他东西,将被传递给从线程内的spu上下文(目前我试图只是把它作为一个通用的指针,但实际上它将是一个指向我定义的另一个结构的指针)。 当我尝试编译时,出现以下错误: spu/../common.h:38: error: expected specifier-qualifier-list before 'spe_context_ptr_t' // here is the offending line(s) typedef struct _PTHREAD_BLOCK { spe_context_ptr_t * context; // Error happens here uintptr32_t args; } PTHREAD_BLOCK;