Tag: 指针

C编程:另一个函数中的malloc()

我需要另一个函数内的 malloc()帮助。 我从我的main()传递一个指针和大小的函数,我想分配内存为该指针dynamic使用malloc()从内部调用函数,但我看到的是…内存,这是得到分配,是在我的被调用的函数中声明的指针,而不是在main()的指针。 我应该如何传递一个函数的指针,并从被调用的函数内部为传入的指针分配内存? 我写了下面的代码,并得到如下所示的输出。 资源: int main() { unsigned char *input_image; unsigned int bmp_image_size = 262144; if(alloc_pixels(input_image, bmp_image_size)==NULL) printf("\nPoint2: Memory allocated: %d bytes",_msize(input_image)); else printf("\nPoint3: Memory not allocated"); return 0; } signed char alloc_pixels(unsigned char *ptr, unsigned int size) { signed char status = NO_ERROR; ptr = NULL; ptr = (unsigned char*)malloc(size); if(ptr== NULL) […]

为什么variables名前面是星号,而不是后面的types?

为什么大多数C程序员都这样命名variables: int *myVariable; 而不是像这样: int* myVariable; 两者都是有效的。 在我看来,星号是types的一部分,而不是variables名的一部分。 谁能解释这个逻辑?

函数指针的解引用是如何发生的?

为什么以及如何取消引用函数指针只是“什么都不做”? 这就是我所说的: #include<stdio.h> void hello() { printf("hello"); } int main(void) { (*****hello)(); } 从这里发表评论: 函数指针解引用就好了,但是得到的函数指示符会立即转换回函数指针 从这里的答案: 解除引用(以您认为的方式)函数的指针意味着:访问一个CODE内存,因为它将是一个DATA内存。 函数指针不能被这样解除引用。 相反,它被称为。 我会用“呼叫”并排使用名称“取消引用”。 没关系。 无论如何:C被devise为使得函数名称标识符以及variables保持函数的指针与代码存储器的地址相同。 而且它允许通过在标识符或variables上使用call()语法跳转到该内存。 函数指针的解引用究竟如何工作?

箭头运算符( – >)在C中的使用

我目前正在学习C语言,通过阅读一本好书,名为“21天教你C”(我已经学过Java和C#,所以我正在以更快的速度发展)。 我正在阅读关于指针的章节,并且 – >(箭头)操作符出现而没有解释。 我认为它被用来调用成员和函数(就像。(点)运算符的等价物,而不是成员的指针)。 但我不完全确定。 我可以请一个解释和代码示例?

为什么使用“新”会导致内存泄漏?

我首先学习了C#,现在我从C ++开始。 据我所知,C ++中的new操作符与C#中的不一样。 你能解释这个示例代码中的内存泄漏的原因吗? class A { … }; struct B { … }; A *object1 = new A(); B object2 = *(new B());

char a =?string?有什么区别? 和char * p =?string?;?

如标题所示,有什么区别 char a[] = ?string?; and char *p = ?string?; 这个问题是在面试时问我的。 我甚至不明白这个说法。 char a[] = ?string? 这是什么? 运营商? 它是一个string的一部分,还是有一些特定的含义?

何时使用引用与指针

我理解指针和引用的语法和一般语义,但是我应该如何决定何时在API中使用引用或指针? 当然,有些情况需要一个或另一个( operator++需要一个引用参数),但一般来说,我发现我更喜欢使用指针(和指针),因为语法清楚,variables正在被破坏性地传递。 例如在下面的代码中: void add_one(int& n) { n += 1; } void add_one(int* const n) { *n += 1; } int main() { int a = 0; add_one(a); // Not clear that a may be modified add_one(&a); // 'a' is clearly being passed destructively } 随着指针,它总是(更)明显是怎么回事,所以对于清晰度是一个大问题的API和类似的指针不比引用更适合? 这是否意味着引用只能在必要时使用(如operator++ )? 有没有任何性能问题与其中一个? 编辑(OUTDATED): 除了允许NULL值和处理原始数组外,似乎select归结为个人偏好。 我已经接受了下面的引用Google的C ++风格指南的答案,因为他们提出了“引用可能会令人困惑,因为它们具有值语法,但是指针语义”。 由于需要额外的工作来清理不应该为NULL的指针参数(例如, […]

指针C中的空指针的指针运算

当一个指向特定types(比如int , char , float ,…)的指针递增时,它的值就会增加该数据types的大小。 如果一个指向大小为x数据的void指针递增,它如何指向前面的x个字节? 编译器如何知道将x添加到指针的值?

在JavaScript中删除对象

我对JavaScript的delete操作符有点困惑。 采取以下一段代码: var obj = { helloText: "Hello World!" }; var foo = obj; delete obj; 这段代码执行完毕后, obj是null ,但是foo仍然指向一个完全像obj 。 我猜这个对象是foo指向的同一个对象。 这使我困惑,因为我期望写入delete obj删除了obj在内存中指向的对象 – 不仅仅是variablesobj 。 这是因为JavaScript的垃圾收集器正在保留/释放的基础上,所以如果我没有任何其他的variables指向对象,它会从内存中删除? (顺便说一句,我的testing是在Safari 4中完成的。)

为什么我应该使用指针而不是对象本身?

我来自Java背景,已经开始使用C ++中的对象。 但有一件事发生在我身上,人们经常使用指向对象的指针而不是对象本身,例如这个声明: Object *myObject = new Object; 而不是: Object myObject; 或者使用一个函数,比如testFunc() ,就像这样: myObject.testFunc(); 我们必须写: myObject->testFunc(); 但是我不明白为什么要这样做。 我会假设它与效率和速度有关,因为我们可以直接访问内存地址。 我对吗?