相关疑难解决方法(0)

为什么数组的地址等于它在C中的值?

在下面的代码中,指针值和指针地址按预期不同.

但数组值和地址不行!

怎么会这样?

产量

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)

c arrays pointers

179
推荐指数
5
解决办法
7万
查看次数

C中的内存地址

在主函数的最后一行,为什么&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)

c c-strings dynamic-allocation

3
推荐指数
1
解决办法
3160
查看次数

char*str和char str []之间的区别

我将相同的字符串值分配给指针和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);返回错误的值呢?

c

2
推荐指数
1
解决办法
2537
查看次数

为什么localarr ==&localarr?

我的意思是,为什么这个数字与控制台相同?

#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)

c arrays callstack local memory-address

1
推荐指数
1
解决办法
101
查看次数

为什么我的C编译器发出警告?

初学者问题.我有以下代码:

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)

似乎没有帮助.我究竟做错了什么?

c string gcc

1
推荐指数
2
解决办法
303
查看次数