我知道每个人都讨厌gotos。 在我的代码中,由于我已经考虑和适应的原因,他们提供了一个有效的解决scheme(即我不寻找“不这样做”作为答案,我理解你的保留,并理解为什么我使用它们无论如何)。 到目前为止,他们已经很棒了,但是我想要扩展function的方式需要我基本上能够存储指向标签的指针,然后再去找它们。 如果这个代码工作,它将代表我需要的functiontypes。 但它不起作用,30分钟的谷歌search没有透露任何东西。 有没有人有任何想法? int main (void) { int i=1; void* the_label_pointer; the_label: the_label_pointer = &the_label; if( i– ) goto *the_label_pointer; return 0; }
这个概念似乎困扰着我。 为什么NSError对象需要将其指针传递给修改对象的方法? 例如,不只是传递一个错误的引用做同样的事情? NSError *anError; [myObjc doStuff:withAnotherObj error:error]; 然后在doStuff中: – (void)doStuff:(id)withAnotherObjc error:(NSError *)error { // something went bad! [error doSomethingToTheObject]; } 为什么上面的工作不像大多数其他对象消息传递模式那样工作? 为什么我们必须使用错误:(NSError **)错误?
我通过编写GAE的应用程序来学习Go,这是一个处理函数的签名: func handle(w http.ResponseWriter, r *http.Request) {} 我在这里是新手指针,那么为什么Request对象是一个指针,但是ResponseWriter不是? 有没有需要这样做,或者这只是使某种先进的基于指针的代码可能?
常量0用作C和C ++中的空指针。 但是在“指向特定的固定地址的指针”的问题中,似乎有一些可能的用途来分配固定的地址。 在任何系统中,对于访问地址0,是否有任何可能的低需求任务? 如果存在,那么0是空指针又是如何解决的呢? 如果不是的话,是什么使得确定没有这样的需求?
在释放它们之后,似乎有两个参数为什么应该设置一个指向NULL的指针。 当释放双指针时避免崩溃。 简而言之:无意中调用free() ,当它被设置为NULL时不会崩溃。 几乎总是这样掩盖了一个逻辑错误,因为没有理由再次调用free() 。 让应用程序崩溃并修复它会更安全。 不能保证崩溃,因为有时候新的内存被分配在相同的地址。 当有两个指向相同地址的指针时,主要发生双重空闲。 逻辑错误也可能导致数据损坏。 避免重复使用已释放的指针 简而言之:访问释放的指针可能会导致数据损坏,如果malloc()在相同的位置分配内存,除非释放的指针设置为NULL 如果偏移量足够大( someStruct->lastMember , theArray[someBigNumber] ), theArray[someBigNumber]不能保证程序在访问NULL指针时崩溃。 而不是崩溃会有数据损坏。 将指针设置为NULL不能解决具有相同指针值的不同指针的问题。 问题 这里有一个post,在释放后盲目地将一个指针设置为NULL 。 哪一个更难debugging? 有两种可能性吗? 这种错误有多大可能导致数据损坏而不是崩溃? 随意扩大这个问题。
很久以前,我曾经在C上学过。 我记得我真正讨厌C的东西:未分配的指针不指向NULL。 我询问了许多人,包括老师,为什么在这个世界上,他们会让未分配的指针的默认行为不指向NULL,因为这似乎更危险,因为它是不可预知的。 答案应该是performance,但我从来没有买过。 如果C默认为NULL,我认为编程历史上许多错误都可以避免。 这里有一些C代码指出(双关意图)我在说什么: #include <stdio.h> void main() { int * randomA; int * randomB; int * nullA = NULL; int * nullB = NULL; printf("randomA: %p, randomB: %p, nullA: %p, nullB: %p\n\n", randomA, randomB, nullA, nullB); } 其中编译警告(很高兴看到C编译器比我在学校更好)和输出: randomA:0xb779eff4,randomB:0x804844b,nullA:(nil),nullB:(nil)
什么是空指针和空指针之间的区别?
我最近开始学习C语言,而且我在理解指针语法时遇到了一些问题,例如,当我编写以下代码行时: int ** arr = NULL; 我如何知道: arr是指向整数的指针的指针 arr是指向整数指针数组的指针 arr是指向整数数组的指针数组的指针 这与int **不是一回事吗? 同样的问题的另一个问题: 如果我有一个接收char ** s的函数作为参数,我想把它作为一个pointerstring数组的指针,意味着指向一个char数组指针数组的指针,但它也是一个指针到一个char的指针?
K&R没有超过它,但他们使用它。 我试着通过编写一个示例程序来看它是如何工作的,但是效果并不好: #include <stdio.h> int bleh (int *); int main(){ char c = '5'; char *d = &c; bleh((int *)d); return 0; } int bleh(int *n){ printf("%d bleh\n", *n); return *n; } 它编译,但我的打印语句吐出垃圾variables(每次我调用该程序时,它们是不同的)。 有任何想法吗?
背景:我试图围绕着指针,几周前我们刚刚在学校看到他们,而今天练习时,我碰到一个愚蠢的? 问题,它可以是超级简单的,但我几乎没有编程经验。 我已经看到了很多有关删除指针的问题,但它们似乎都与删除类而不是“简单”指针(或任何适当的术语)有关,下面是我正在尝试的代码跑: #include <iostream>; using namespace std; int main() { int myVar, *myPointer; myVar = 8; myPointer = &myVar; cout << "delete-ing pointers " << endl; cout << "Memory address: " << myPointer << endl; // Seems I can't *just* delete it, as it triggers an error delete myPointer; cout << "myPointer: " << […]