提问人:zlSxrtig 提问时间:1/27/2022 更新时间:1/27/2022 访问量:243
如何在没有 malloc oder calloc 的情况下给出指针元素
how to give pointers elements without malloc oder calloc
问:
我想知道您是否可以在不使用 malloc 或 calloc 的情况下在 char 指针上分配内存。
举个例子:
char *p;
现在我想这样做
*(p+1) = 'd'
printf("%c", *(p+1));
输出为“d”。我希望这在没有 malloc 或 calloc 的情况下工作
答:
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
...
...
评论