如何在没有 malloc oder calloc 的情况下给出指针元素

how to give pointers elements without malloc oder calloc

提问人:zlSxrtig 提问时间:1/27/2022 更新时间:1/27/2022 访问量:243

问:

我想知道您是否可以在不使用 malloc 或 calloc 的情况下在 char 指针上分配内存。

举个例子:

char *p;

现在我想这样做

*(p+1) = 'd'
printf("%c", *(p+1));

输出为“d”。我希望这在没有 malloc 或 calloc 的情况下工作

C 指针 动态 malloc

评论

0赞 Cheatah 1/27/2022
如果你解释为什么你想要这个,你可能会得到更好的答案。
0赞 zlSxrtig 1/27/2022
我只是想了解它是如何工作的

答:

2赞 0___________ 1/27/2022 #1

您需要为指针分配指向合适类型和大小的对象的引用。

malloc返回对适当内存块的引用。

您还可以静态(如果在块上下文中使用,则自动)分配对象。

char data[2];
char *p;
 /* ... */

p = data;
*(p+1) = 'd'
printf("%c", *(p+1));

因此,基本上指针必须引用有效对象。

评论

1赞 Jabberwocky 1/27/2022
malloc returns the reference...”,实际上返回一个指针malloc
0赞 0___________ 1/27/2022
如果您知道,@Jabberwocky解释其中的区别,并且写此评论非常重要。
0赞 Lundin 1/27/2022
@Jabberwocky C++语言是我所知道的唯一可以区分的案例。但是术语引用/引用传递比 C++ 早了一二十年。这是一个通用的计算机科学术语,与按值传递相反。
0赞 Jabberwocky 1/27/2022
正确的词是指针。至少我从未在任何 C 文档中看到过“引用”这个词。OTOH 在 C++ 中,“指针”和“引用”之间有很大的区别。
0赞 Jabberwocky 1/27/2022
@Lundin这是真的,但在 C 中仍然根本没有引用传递。恕我直言,指针应该被称为指针。
0赞 hsuecu 1/27/2022 #2

C只是人类可读的汇编,每件事都由程序员完成。没有花哨的垃圾收集器是事实,但它仍然具有尖端优势(更确切地说是一把钝刀和给你的锉刀)。

指针卫生是您需要注意的一个术语。一旦你做了一个指针变量,你就需要给它分配一些有效的内存地址。如果当时无法实现,则将其指定为 NULL。

char * p; // pointing to random location due to grabage value.
*(p+1) = 'd'; // you are overwiting there
printf("%c", *(p+1)); // printing single character

应该做的是。

char *p = NULL;
*(p+1) = 'd'; // this will pop error which you can see in gdb
...
...