刚从C开始,我想知道是否有人能解释一些事情。
我相信你可以用下面的方法初始化一个字符数组
char arr[] = "Hello"
这将创建一个字符数组,其值为'H','e','l','l','o','\0'
。
但如果我真的创造了这个:
char* cp = "Hello";
会创建一个数组,以及指向该数组的指针吗?
例如:cp
将指向内存中的第一个元素('H')
,以及数组中的其他元素?
数组基本上是一个常量指针,指向数组的开头。指针就是指向任何内存位置的指针。因此,给定指针p
,p[3]
将指向p3
,这将导致分段错误,除非您将其声明为至少包含4个元素的“数组”(int*p=new int[4];
)。这与intp[4]完全相同
,除了p现在是一个常量int*
。
字符串文字本身具有数组类型。在你给出的第一个例子中,实际上有两个数组。第一个是包含字符串文字的数组,第二个是要声明的数组arr
。字符串文本中的字符被复制到arr
中。C 11的措辞是:
一个char
数组(无论是纯char
,char
还是unsigned char
),char16_t
数组,char32_t
数组,或者wchar_t
数组都可以通过一个窄字符literal、char16_t
string literal、char32_t
string literal来初始化,或宽字符串文字,或使用大括号中包含的适当类型的字符串文字。字符串文本值的连续字符初始化数组的元素。
在第二个示例中,您让字符串文字数组进行数组到指针的转换,以获得指向其第一个元素的指针。因此,指针指向字符串文字数组的第一个元素。
但是,请注意,您的第二个示例使用了一个特性,该特性在C 03中被弃用,在C 11中被删除,允许从字符串文本转换为char*
。对于有效的C 11,它必须是:
const char* cp = "Hello";
如果在C 03或C中使用到char*
的转换,则必须确保不尝试修改字符,否则将出现未定义的行为。
我正在通过做微控制器项目来自学C++。我当前的项目是使用一对或Adafruit羽毛分组无线电。无线电数据包的库函数需要一个C样式的字符串(我相信),我理解它是一个char的数组。 我已经设置了一个枚举来反映接收方的各种操作,并希望将该状态发送回发送方。所以我想把枚举变成char的数组。 在搜索将枚举转换为char数组的方法时,最简单的方法(对我来说)是将枚举变量传递给带有switch语句的函数,该
使用Java的工作代码: C++代码用dictionary[“Apple”,“Pen”]返回“ApplePenApple”的false,我不知道为什么java返回true是正确的。这两种解决方案之间唯一的主要区别(我认为)是我的C++在java代码中使用向量而不是原生数组。最初,我认为这可能与C++使用自动存储(堆栈)而不是自由存储(堆)有关,这就是为什么我使用向量而不是C样式的数组来避免内存管理
当我试图打印未初始化的静态字符数组时,它会给出运行时错误(Null指针异常),而未初始化的静态int数组会给出Null值。为什么?
本文向大家介绍C++与C的差异分析,包括了C++与C的差异分析的使用技巧和注意事项,需要的朋友参考一下 虽说C++是向后兼容C的,但C++与C还是存在许多差异。本文列举了几个例子加以说明,同时这些也是我们非常容易忽略的地方。本文仅简单的列举几例,更多的不同之处读者还需要在学习与实践中不断的进行发掘和总结。 C编译通过但C++编译不通过: 1、C++中编译器不允许在一个函数声明之前调用它,但C中编译
问题内容: 编译并在C中运行此代码 输出: 现在对于Java中的相同逻辑 输出: 为什么两种语言的输出都不同,输出是可以理解的,但我无法理解 还有一件事,如果应用前缀运算符,那么两种语言的结果相同,为什么呢? 问题答案: 这是因为在C.看看所调用未定义行为这 从链接: 第二句说:如果将对象写入完整表达式中,则在同一表达式中对对象的任何和所有访问都必须直接参与要写入的值的计算。该规则有效地将法律表达
本文向大家介绍C ++中子集差异的总和,包括了C ++中子集差异的总和的使用技巧和注意事项,需要的朋友参考一下 在这个问题上,我们得到了一个n的集合S。我们的任务是创建一个程序,以查找子集差异之和,即子集的最后一个元素与第一个元素的差异。 公式是 让我们举个例子来了解这个问题, 输入 - 输出- 说明-所有子集是- 解决该问题的简单方法是找到所有子集的last和first之间的差异,然后将它们相加