在下面的代码中,指针值和指针地址按预期不同.
但数组值和地址不行!
怎么会这样?
产量
my_array = 0022FF00
&my_array = 0022FF00
pointer_to_array = 0022FF00
&pointer_to_array = 0022FEFC
Run Code Online (Sandbox Code Playgroud)
#include <stdio.h>
int main()
{
char my_array[100] = "some cool string";
printf("my_array = %p\n", my_array);
printf("&my_array = %p\n", &my_array);
char *pointer_to_array = my_array;
printf("pointer_to_array = %p\n", pointer_to_array);
printf("&pointer_to_array = %p\n", &pointer_to_array);
printf("Press ENTER to continue...\n");
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud) 在主函数的最后一行,为什么&word2不同word2?假设正确的标题已到位.谢谢!
int main()
{
char word1[20];
char *word2;
word2 = (char*)malloc(sizeof(char)*20);
printf("Sizeof word 1: %d\n", sizeof (word1));
printf("Sizeof word 2: %d\n", sizeof (word2));
strcpy(word1, "string number 1");
strcpy(word2, "string number 2");
printf("%s\n", word1);
printf("%s\n", word2);
printf("Address %d, evaluated expression: %d\n", &word1, word1);
printf("Address %d, evaluated expression: %d\n", &word2, word2);
//Why this one differ?
}
Run Code Online (Sandbox Code Playgroud) 我将相同的字符串值分配给指针和char数组
char *str = "hello" "world";
char str1[] = "hello" "world";
Run Code Online (Sandbox Code Playgroud)
然后使用sizeof()函数返回它们的长度
sizeof(str); // on my computer, it's 8 !!
sizeof(str1); // return 11, which is right
Run Code Online (Sandbox Code Playgroud)
但是它们都可以通过以下方式打印出来%s:
printf("%s\n%s\n", str, str1);
Run Code Online (Sandbox Code Playgroud)
那么为什么sizeof(str);返回错误的值呢?
我的意思是,为什么这个数字与控制台相同?
#include <stdio.h>
int main()
{
char localarr[99];
printf("%d\n",(int)localarr);
printf("%d\n",(int)&localarr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
据我所知,localarr的地址实际上并没有存储在任何变量中.但是生成的代码可以存储在幕后,或者至少gcc可以发出警告,而不是在我将此类函数传递给期望char**的函数时允许段错误.为什么我们有这种行为?
相关:为什么
char **ppl = &localarr;
Run Code Online (Sandbox Code Playgroud)
结果是:
error: cannot convert ‘char (*)[99]’ to ‘char**’
Run Code Online (Sandbox Code Playgroud)
?
初学者问题.我有以下代码:
char input[10];
scanf("%s", &input);
Run Code Online (Sandbox Code Playgroud)
我的编译器抛出以下警告:
warning: format '%s' expects type 'char *', but argument 2 has type 'char (*)[10]'
warning: format '%s' expects type 'char *', but argument 2 has type 'char (*)[10]'
Run Code Online (Sandbox Code Playgroud)
改为:
char * input;
Run Code Online (Sandbox Code Playgroud)
似乎没有帮助.我究竟做错了什么?