在这个问题,有人建议意见,我应该不会投的结果malloc,即
int *sieve = malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)
而不是:
int *sieve = (int *) malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)
为什么会这样呢?
假设我有一个以这种方式返回C字符串的简单函数:
const char * getString()
{
const char * ptr = "blah blah";
return ptr;
}
Run Code Online (Sandbox Code Playgroud)
我以这种方式从main()调用getString():
Run Code Online (Sandbox Code Playgroud)const char * s = getString();
1)根据gdb,变量ptr存储在堆栈中,但ptr指向的字符串不是:
(gdb) p &ptr
$1 = (const char **) 0x7fffffffe688
(gdb) p ptr
$2 = 0x4009fc "blah blah"
Run Code Online (Sandbox Code Playgroud)
这是否意味着"blah blah"不是getString()中的局部变量?
我想如果它是一个局部变量,我将无法将它传递给我的main()函数......但如果它不存在,它存储在哪里?在堆上?这是OS每次点击字符串时实现的"一种"动态内存分配,还是什么?
2)如果我使用数组而不是指针,这样:
const char *getString2()
{
const char a[] = "blah blah blah";
return a;
}
Run Code Online (Sandbox Code Playgroud)
编译器警告我:
warning: address of local variable ‘a’ returned
(当然程序编译,但它不起作用).
实际上,如果我问gdb,我会的
(gdb) p &a
$2 = (const char …Run Code Online (Sandbox Code Playgroud) 我是C语言的新学习者,我的问题是指针.到目前为止,我学习和搜索指针只能存储其他变量的地址,但不能存储实际值(如整数或字符).但是在下面的代码中,char指针c实际存储了一个字符串.它执行时没有错误,并将输出作为"名称".
#include <stdio.h>
main()
{
char *c;
c="name";
puts(c);
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释一个指针如何存储没有任何内存的字符串,或者是否创建了创建它的内存以及可以创建多少大小的内存.
我尝试使用整数类型指针
#include <stdio.h>
main()
{
int *c;
c=10;
printf("%d",c);
}
Run Code Online (Sandbox Code Playgroud)
但它给出了一个错误
cc test.c -o test
test.c: In function ‘main’:
test.c:5:3: warning: assignment makes pointer from integer without a cast [enabled by default]
c=10;
^
test.c:6:2: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]
printf("%d",c);
^
Run Code Online (Sandbox Code Playgroud)
指针存储变量的地址然后为什么整数指针与字符指针不同.
如果有什么我缺少关于指针plz解释.