dereference相关内容

NULL指针的取消引用是否也等于NULL?

以下代码段是否在if语句中编译/执行该块? int* pointer = NULL; int deref = *pointer; if(deref == NULL){ // will execute? } 由于pointer变量包含NULL,因此对该指针变量的取消引用还会返回NULL还是会导致运行时错误? 解决方案 结果是“未定义的行为",它可能会或可能不会触发运行时错误,并 ..
发布时间:2020-05-28 23:02:47 C/C++开发

无法理解表示法:带指针的*和**

我的指针有问题.我知道这是怎么做的: *name 我知道这是一个指针. 我一直在搜索,但是我既不了解它的功能,也没有找到有用的信息 **name 上下文是int ** name,不是乘法 有人可以帮我吗? 解决方案 注意:没有适当的上下文,*name和**name的用法不明确.它可能是肖像(a).解引用运算符(b)乘法运算符 考虑到您正在谈论这样的 ..
发布时间:2020-05-28 22:55:03 C/C++开发

char *的大小是否与int *的大小相同?

我知道: char *是char的指针. 和 int *是指向int的指针. 所以,我想确认以下两件事: 所以现在假设我在32位计算机上,那么这意味着内存地址为32位宽. 因此,这意味着char *和int *的大小均为32位(4个字节),对吗? char * *的大小也和int *的大小一样吗? 假设我有: int * ptr; 因此,现在做*((char * *)ptr ..
发布时间:2020-05-28 22:54:13 其他开发

结构和指向指针的指针

我正在学习链接列表,以及如何在C中使用结构和指针创建它们.我在下面有一个例子.根据我的理解,被称为push()传递了头节点所在的结构的开始存储位置作为参数. push()函数的参数将struct节点作为指向指针的指针,因此将其作为引用而不是实际副本传递.因此,结构节点** headref的第一个指针只是指向头节点的内存位置的指针,第二个指针指向该值,即该头节点指向的下一个内存位置.我们通过在str ..
发布时间:2020-05-28 22:46:44 其他开发

为什么在将值打印到地址位于指针中的内存中之前,必须将void指针强制转换为int或其他内容?

我想知道为什么在打印内存中的地址内容之前,必须将void指针强制转换为int *或char *,即使我们告诉printf()函数如何解释其中的数据也是如此.记忆吗? 假设我们有以下代码: int main (void) { void* c = malloc(4); printf("%d",*c); return 0; } 为什么无法做到这一点? 因此,我想问清楚的是,这 ..
发布时间:2020-05-28 22:35:55 其他开发

通常,解引用指针表达式的结果是否为引用类型?

延迟指针导致间接使用对象的值.但是我从来没有真正理解过“使用"是什么意思.我开始思考这个问题,直到我的编译器对以下代码产生错误 int i = 0, *pi = &i; decltype(*pi) c; // error: 'c' declared as reference but not initialized. 我很长时间以来一直在查看错误,并搜索了一些问题,我只能给出以下参数.我不 ..
发布时间:2020-05-28 22:28:51 C/C++开发

关于取消引用"void *"指针

我无法找到如何从下面的代码行中删除上述警告. data是空指针,作为回调函数的一部分,它将在数据指针中接收字符串.由于我已经强制转换了void指针,但是编译器仍然显示警告. 下面一行基本上显示了两个警告. 1.取消引用"void *"指针 2.接受类型为'void 的表达式的地址 service_ind = atoi((const char*)&data[at_response.par ..
发布时间:2020-05-28 21:28:37 其他开发

如何理解C语言中的指针星号*?

我在指针符号*上苦苦挣扎,我发现它在声明和表达式中的使用方式非常混乱. 例如: int *i; // i is a pointer to an int 但是语法背后的逻辑是什么?我之前的*是什么意思?让我们来看下面的例子.请纠正我错了的地方: char **s; char *(*s); // added parentheses to highlight precedence ..
发布时间:2020-05-28 21:22:50 其他开发

Oracle PL/SQL:如何从各种REF的DEREF?

我是Oracle Objects的新手,但遇到了问题.我不知道如何从REF的VARRAY中取消引用项目.下面是一些源代码,可重现我所遇到的问题. 错误是:PLS-00306:调用'DEREF'时参数的数量或类型错误 DROP TYPE LOC FORCE / DROP TYPE LIST_LOC FORCE / DROP TYPE PIZ FORCE / CREATE OR REPLAC ..
发布时间:2020-05-28 19:24:13 数据库

如果有的话,编译器何时会在指针解引用优化方面保持保守?

因此,最近,我对编译器(正在讨论的问题)gcc (GCC) 4.8.3在优化指针和指针方面的表现很感兴趣. 最初,我创建了一个简单的整数和一个整数指针,并实现了 对其进行操作,以便我将其打印出来.不出所料,所有操作 不论是否通过取消引用的指针,对经过硬编码的代码都进行了优化. call __main leaq .LC0(%rip), %rcx movl $1, %ed ..
发布时间:2020-05-21 21:15:49 其他开发

为什么左侧的'dereference'和'address of'运算符在左侧?

在C语言(和其他一些类似C的语言)中,我们有2个用于处理指针的一元运算符:解除引用运算符(*)和'地址'运算符(&).它们是 left 一元运算符,它会按操作顺序引入不确定性,例如: *ptr->field 或 *arr[id] 操作顺序 由标准严格定义,但是从人的角度来看,这令人困惑.如果*运算符是 right 一元运算符,则顺序将是显而易见的,并且不需要多余的括号: ..
发布时间:2020-05-21 19:45:08 其他开发

Objective-c上的指针

根据我的理解(如果我错了,请纠正我): int x, count = 10; int *hello; hello = &count; x = *hello; 此处,变量x和count声明为整数类型.此外,变量count被赋值为10. hello是一个指向整数的指针.您好然后分配计数的地址. 为了访问count的值,hello必须在其前面带有一个星号,即* hello. 因此, ..
发布时间:2020-05-19 01:48:50 移动开发

取消引用new指针是否被认为是好的样式?

为避免继续使用->而直接使用该对象,是否可以这样做? obj x = *(new obj(...)); ... delete &obj; 解决方案 这不仅是错误的做法,而且: 内存泄漏(很可能,除非您使用的是从提供的代码中看不到的模式),因为obj将存储由副本 >表达式,并且new返回的指向该对象的指针丢失; 最重要的是,未定义的行为,因为您要向delete传递未使用new分配 ..
发布时间:2020-05-17 19:52:23 C/C++开发

使用2 D数组和指针的4种不同方式,对吗?一个解释会很有帮助

下面的四个程序输入2D数组,然后将其打印出来. 第一个打印出垃圾值,并给出一些警告 (我听不懂). 第二个可以正常工作,也很有道理,因为我相信 2 D数组线性存储在内存中. 第三个可以正常工作,但我不知道为什么会这样. 第四个也可以. 因此,如果有人可以解释每个方法的使用方式,将会有很大的帮助 工作,欢呼声 恐怕我对指针如何工作的理解并不如我所想. int mai ..
发布时间:2020-05-08 20:11:42 其他开发