相关疑难解决方法(0)

C:char指针和数组之间的差异

考虑:

char amessage[] = "now is the time";
char *pmessage = "now is the time";
Run Code Online (Sandbox Code Playgroud)

我从C编程语言第2版​​中读到,上述两个陈述没有做同样的事情.

我一直认为数组是一种操作指针来存储一些数据的便捷方式,但显然情况并非如此...... C中数组和指针之间的"非平凡"差异是什么?

c arrays pointers

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

初始化指针时的字符串文字与char数组

灵感来自这个问题.

我们可以char用字符串文字初始化指针:

char *p = "ab";
Run Code Online (Sandbox Code Playgroud)

它完全没问题.人们可以认为它等同于以下内容:

char *p = {'a', 'b', '\0'};
Run Code Online (Sandbox Code Playgroud)

但显然事实并非如此.而且不仅因为字符串文字存储在只读内存中,而且即使通过字符串文字具有一种类型的char数组,并且初始化程序{...}具有char数组类型,两个声明的处理方式也不同,因为编译器是发出警告:

警告:标量初始化程序中的多余元素

在第二种情况下.这种行为的解释是什么?

更新:

此外,在后一种情况下,指针p将具有0x61(第一个数组元素的值'a')而不是存储器位置的值,使得编辑器在警告时仅采用初始化器的第一个元素并将其分配给p.

c arrays gcc

19
推荐指数
4
解决办法
5147
查看次数

在C中初始化一个char指针.为什么认为危险?

可能重复:
C中的char s []和char*s有什么区别?

我初始化一个char指针:

char *a="test";
Run Code Online (Sandbox Code Playgroud)

我在某些地方读到这被认为是只读的,这很危险.

这是否意味着"test"堆中没有分配空间?这是否意味着字符串"test"可以在程序中稍后写入?

---扩大我的问题---

如果我已a按上述方式进行了初始化,那么我会进行一系列其他初始化,例如:

int b=20;
char c[]="blahblahblah";
Run Code Online (Sandbox Code Playgroud)

内存中的"测试"会被"20"或"blah"覆盖吗?或者这种情况没有根据?

c pointers initialization char

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

标签 统计

c ×3

arrays ×2

pointers ×2

char ×1

gcc ×1

initialization ×1