c - 关于C中指针和字符串的问题

标签 c arrays string pointers

<分区>

Possible Duplicate:
What is the difference between char s[] and char *s in C?
Difference between char *str = “…” and char str[N] = “…”?

我有一些让我感到困惑的代码。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  char* string1 = "this is a test";
  char string2[] = "this is a test";
  printf("%i, %i\n", sizeof(string1), sizeof(string2));
  system("PAUSE"); 
  return 0;
}

当它输出 string1 的大小时,它打印 4,这是意料之中的,因为指针的大小是 4 个字节。但是当它打印 string2 时,它输出 15。我认为数组是一个指针,所以 string2 的大小应该与 string1 相同,对吧?那么为什么它为同一类型的数据(指针)打印出两种不同的大小呢?

最佳答案

数组不是指针。在某些情况下,数组名称​​衰减指向数组第一个元素的指针:当你将它传递给一个函数时,当你将它分配给一个指针时,等等。但否则数组就是数组 - 它们存在于堆栈,具有可以用 sizeof 确定的编译时大小,以及所有其他好东西。

关于c - 关于C中指针和字符串的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4380090/

相关文章:

c - C中printf()函数的返回值

c - GTK in C - 如何控制 TreeView 中的列宽?

c - 如何在C/MIPS中找到最大和的子序列?

java - Count of most occurring digit...找到给定数字中出现次数最多的数字

string - 使 Mathematica 中的字符串操作更加方便

php - PHP 中的字符串处理

在 ubuntu 中将数字文字从 64 位编译器转换为 32 位编译器

c - 在水平模式下向 gtk 框(gtk 3)添加按钮,即使 Expand 设置为 false,小部件也会占用整个垂直空间

c++ - 循环和数组

arrays - 从 UICollectionView 中搜索数组