如果我们尝试释放指向NULL的指针,内存中会发生什么? 这有效吗? 为什么不显示任何警告/错误消息?
我对解引用操作符,操作符的地址和指针有一个相当好的理解。 然而,当我看到像这样的东西时,我感到困惑: int* returnA() { int *j = &a; return j; } int* returnB() { return &b; } int& returnC() { return c; } int& returnC2() { int *d = &c; return *d; } 在returnA()我要求返回一个指针; 只是为了澄清这个作品,因为j是一个指针? 在returnB()我要求返回一个指针; 因为指针指向一个地址, returnB()的原因是因为我返回&b ? 在returnC()我要求返回int的地址。 当我返回c是&运算符自动“附加” c ? 在returnC2()我再次要求返回int的地址。 *d是否工作,因为指针指向一个地址? 假设a,b,c被初始化为整数。 有人能validation我的四个问题是否正确吗?
背景 我已经创build了一个基本的链接列表数据结构主要用于学习目的。 列表的一个目标是可以处理不同的数据结构。 因此,我在结构组成方面尝试过我的手来模拟C中的“inheritance”。下面是构成我的链表的基础的结构。 typedef struct Link { struct Link* next; struct Link* prev; } Link; typedef Link List; 在我的实现中,我select了一个作为列表头部和尾部的标记节点(这就是为什么链接==列表)。 为了让列表实际处理数据,一个结构只包含Link结构作为第一个成员: typedef struct { Link link; float data; } Node; 所以链表就像这样 ┌───┬───┬───┐ ┌───┬───┐ ┌───┬───┬───┐ … <—>│ P │ N │ D │<—>│ P │ N │<—>│ P │ N │ D │<—> … └───┴───┴───┘ └───┴───┘ […]
我很困惑,为什么这不能编译: 不可能的types断言:Faz没有实现Foo(Bar方法有指针接收器) 如果我使接收器Faz.Bar Faz值而不是一个Faz指针,然后它编译好,但我认为总是有更好的指针接收器,所以值不被复制? package main import ( "log" ) func main() { foo := New().(Faz) log.Println(foo) } type Foo interface { Bar() string } func New() Foo { return &Faz{} } type Faz struct { } func (f *Faz) Bar() string { return `Bar` }
对于指针variablesp ,有可能p <( p + 1 )是假的吗? 请解释你的答案。 如果是的话,在什么情况下会发生这种情况? 我想知道p + 1是否可以溢出并等于0。 例如,在一台C语言程序的GCC-4.8的64位电脑上: int main(void) { void *p=(void *)0xFFFFFFFFFFFFFFFF; printf("p :%p\n", p); printf("p+1 :%p\n", p+1); printf("Result :%d\n", p<p+1); } 它返回: p : 0xffffffffffffffff p+1 : (nil) Result : 0 所以我认为这是可能的。 对于无效的指针位置可能会发生。 这是我能想到的唯一解决scheme。 有其他人吗? 注意:不做任何假设。 考虑有可能发生这种情况的任何编译器/平台/架构/操作系统。
我有一个关于指向2d数组的指针的问题。 如果一个数组是类似的 int a[2][3]; 那么,这是一个指针数组a ? int (*p)[3] = a; 如果这是正确的,我想知道[3]从int(*p)[3]什么意思?
可能重复: 免费(ptr)其中ptr是NULL损坏的内存? 我正在写一个C函数释放一个指针,如果它是malloc()编辑。 指针可以是NULL(在发生错误的情况下,代码没有机会分配任何东西)或分配malloc() 。 使用free(ptr);是安全的吗free(ptr); 而不是if (ptr != NULL) free(ptr); ? -Wall -Wextra -ansi -pedantic不会抱怨,即使有 – -Wall -Wextra -ansi -pedantic ,但它是好的做法?
在Objective-C中,为什么[object doSomething] ? 因为你在对象上调用一个方法,它不是[*object doSomething] ,这意味着你应该去引用指针吗?
在做指针算术的时候,有很多未定义/未指定行为的例子 – 指针必须指向同一个数组(或者结束时),或者在同一个对象中,限制什么时候可以根据上面的方法进行比较/操作等等 以下操作是否定义良好? int* p = 0; p++;
为什么需要有std::reference_wrapper ? 应该在哪里使用? 它与简单的指针有何不同? 它的性能如何比较简单的指针?