如果我在C++应用程序中全局声明数据结构,它是否会消耗堆栈内存或堆内存?
例如
struct AAA
{
.../.../.
../../..
}arr[59652323];
Run Code Online (Sandbox Code Playgroud) 我用各种各样的C教程和与指针相关的书籍一直在苦苦挣扎几个小时,但我真正想知道的是,如果可以在创建一个char指针后更改它.
这是我尝试过的:
char *a = "This is a string";
char *b = "new string";
a[2] = b[1]; // Causes a segment fault
*b[2] = b[1]; // This almost seems like it would work but the compiler throws an error.
Run Code Online (Sandbox Code Playgroud)
那么有没有办法改变字符串内的值而不是指针地址?
谢谢
编辑:
谢谢大家的回答.现在更有意义了.特别有意义的是,为什么有时它工作正常而其他时候不工作.因为有时候我会传递一个char指针,有时会传递一个char数组(char数组工作正常).
考虑这个定义:
char *pmessage = "now is the time";
Run Code Online (Sandbox Code Playgroud)
在我看来,pmessage将指向内存中包含这些字符的连续区域和最后一个字符'\0'.所以我从中得出,只要我在这个区域的范围内,我就可以使用指针算法来访问该字符串中的单个字符.
那么为什么他们说(K&R)修改个别角色是不确定的?
此外,为什么当我运行以下代码时,我得到一个"分段错误"?
*(pmessage + 1) = 'K';
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写就地反向函数并且几乎完全遵循在线代码,但运行以下程序会引发总线错误.我是否将错误的参数传递给reverse()?
void reverse(char *str) {
char * end = str;
char tmp;
if (str) {
while (*end) {
++end;
}
--end;
while (str < end) {
tmp = *str;
*str++ = *end;
*end-- = tmp;
}
}
}
int main() {
char *s = "sample";
reverse(s);
printf("%s\n");
return 1;
}
Run Code Online (Sandbox Code Playgroud)