dereference相关内容
以下代码段是否在if语句中编译/执行该块? int* pointer = NULL; int deref = *pointer; if(deref == NULL){ // will execute? } 由于pointer变量包含NULL,因此对该指针变量的取消引用还会返回NULL还是会导致运行时错误? 解决方案 结果是“未定义的行为",它可能会或可能不会触发运行时错误,并
..
我的指针有问题.我知道这是怎么做的: *name 我知道这是一个指针. 我一直在搜索,但是我既不了解它的功能,也没有找到有用的信息 **name 上下文是int ** name,不是乘法 有人可以帮我吗? 解决方案 注意:没有适当的上下文,*name和**name的用法不明确.它可能是肖像(a).解引用运算符(b)乘法运算符 考虑到您正在谈论这样的
..
我知道: char *是char的指针. 和 int *是指向int的指针. 所以,我想确认以下两件事: 所以现在假设我在32位计算机上,那么这意味着内存地址为32位宽. 因此,这意味着char *和int *的大小均为32位(4个字节),对吗? char * *的大小也和int *的大小一样吗? 假设我有: int * ptr; 因此,现在做*((char * *)ptr
..
我正在学习链接列表,以及如何在C中使用结构和指针创建它们.我在下面有一个例子.根据我的理解,被称为push()传递了头节点所在的结构的开始存储位置作为参数. push()函数的参数将struct节点作为指向指针的指针,因此将其作为引用而不是实际副本传递.因此,结构节点** headref的第一个指针只是指向头节点的内存位置的指针,第二个指针指向该值,即该头节点指向的下一个内存位置.我们通过在str
..
我想知道为什么在打印内存中的地址内容之前,必须将void指针强制转换为int *或char *,即使我们告诉printf()函数如何解释其中的数据也是如此.记忆吗? 假设我们有以下代码: int main (void) { void* c = malloc(4); printf("%d",*c); return 0; } 为什么无法做到这一点? 因此,我想问清楚的是,这
..
延迟指针导致间接使用对象的值.但是我从来没有真正理解过“使用"是什么意思.我开始思考这个问题,直到我的编译器对以下代码产生错误 int i = 0, *pi = &i; decltype(*pi) c; // error: 'c' declared as reference but not initialized. 我很长时间以来一直在查看错误,并搜索了一些问题,我只能给出以下参数.我不
..
在 unqlite 库中,我找到了以下代码: pObj = jx9VmReserveMemObj(&(*pVm),&nIdx); 其中pVm是: typedef struct jx9_vm jx9_vm; jx9_vm *pVm 和被调用的函数声明为: jx9_value * jx9VmReserveMemObj(jx9_vm *, sxu32 *); 构造&(*p
..
我无法找到如何从下面的代码行中删除上述警告. data是空指针,作为回调函数的一部分,它将在数据指针中接收字符串.由于我已经强制转换了void指针,但是编译器仍然显示警告. 下面一行基本上显示了两个警告. 1.取消引用"void *"指针 2.接受类型为'void 的表达式的地址 service_ind = atoi((const char*)&data[at_response.par
..
我在指针符号*上苦苦挣扎,我发现它在声明和表达式中的使用方式非常混乱. 例如: int *i; // i is a pointer to an int 但是语法背后的逻辑是什么?我之前的*是什么意思?让我们来看下面的例子.请纠正我错了的地方: char **s; char *(*s); // added parentheses to highlight precedence
..
来自Rust指南: 要取消引用(获取要引用的值而不是引用本身)y,我们使用星号(*) 所以我做到了: fn main() { let x = 1; let ptr_y = &x; println!("x: {}, ptr_y: {}", x, *ptr_y); } 即使没有显式取消引用,这也给我相同的结果(x = 1; y = 1): fn ma
..
这是我运行的程序: #include int main(void) { int y = 1234; char *p = &y; int *j = &y; printf("%d %d\n", *p, *j); } 我对输出有些困惑.我看到的是: -46 1234 我将此程序作为实验编写,不确定要输出什么.我原本希望从y开始一个
..
我是Oracle Objects的新手,但遇到了问题.我不知道如何从REF的VARRAY中取消引用项目.下面是一些源代码,可重现我所遇到的问题. 错误是:PLS-00306:调用'DEREF'时参数的数量或类型错误 DROP TYPE LOC FORCE / DROP TYPE LIST_LOC FORCE / DROP TYPE PIZ FORCE / CREATE OR REPLAC
..
因此,最近,我对编译器(正在讨论的问题)gcc (GCC) 4.8.3在优化指针和指针方面的表现很感兴趣. 最初,我创建了一个简单的整数和一个整数指针,并实现了 对其进行操作,以便我将其打印出来.不出所料,所有操作 不论是否通过取消引用的指针,对经过硬编码的代码都进行了优化. call __main leaq .LC0(%rip), %rcx movl $1, %ed
..
在C语言(和其他一些类似C的语言)中,我们有2个用于处理指针的一元运算符:解除引用运算符(*)和'地址'运算符(&).它们是 left 一元运算符,它会按操作顺序引入不确定性,例如: *ptr->field 或 *arr[id] 操作顺序 由标准严格定义,但是从人的角度来看,这令人困惑.如果*运算符是 right 一元运算符,则顺序将是显而易见的,并且不需要多余的括号:
..
背景 今天只和一个C家伙聊天,我们不同意以下几点: int intgA[2] = { 1, 2 }; int intgB[2] = { 3, 5 }; int *intAPtr = intgA; int *intBPtr = intgB; 所以,当我们这样做时: *intAPtr++ = *intBPtr++; 我的分析 第一: intBPtr递增1,现在指
..
根据我的理解(如果我错了,请纠正我): int x, count = 10; int *hello; hello = &count; x = *hello; 此处,变量x和count声明为整数类型.此外,变量count被赋值为10. hello是一个指向整数的指针.您好然后分配计数的地址. 为了访问count的值,hello必须在其前面带有一个星号,即* hello. 因此,
..
为避免继续使用->而直接使用该对象,是否可以这样做? obj x = *(new obj(...)); ... delete &obj; 解决方案 这不仅是错误的做法,而且: 内存泄漏(很可能,除非您使用的是从提供的代码中看不到的模式),因为obj将存储由副本 >表达式,并且new返回的指向该对象的指针丢失; 最重要的是,未定义的行为,因为您要向delete传递未使用new分配
..
我有一个像这样的简单模块: #define MODULE #include #include #include int init_module(void) { struct inode { int i_ino; }; struct dentry
..
我是编程的新手,我正在尝试将“指针"的想法包扎起来. int main() { int x = 5; int *pointerToInteger = & x; cout
..
下面的四个程序输入2D数组,然后将其打印出来. 第一个打印出垃圾值,并给出一些警告 (我听不懂). 第二个可以正常工作,也很有道理,因为我相信 2 D数组线性存储在内存中. 第三个可以正常工作,但我不知道为什么会这样. 第四个也可以. 因此,如果有人可以解释每个方法的使用方式,将会有很大的帮助 工作,欢呼声 恐怕我对指针如何工作的理解并不如我所想. int mai
..