我知道你可以通过指针间接传递一个值:你指定你将某个地址(一个指针)的值(*)分配给某个东西(比如一个char)。
// This works: I can pass char indirectly via pointers
// by saying "value at char pointer line equals c1 or c2"
char c1 = 'a';
char c2 = 'b';
char* line;
*line = c1;
*(line+1) = c2;
我可以使用上面的*(第+1行)向右滑动内存空间。但是,当我循环它时,这失败了(下面):
// Output: "Process returned -1073741819 (0xC0000005)"
// Why?
char c;
char* line1;
int i = 0;
while ((c = getchar()) != EOF){
*(line1+i) = c;
i++;
}
输出:“处理返回-1073741819(0xC0000005)”
当我尝试迭代while循环时,为什么它无法通过指针间接传递值?非常感谢!
答案 0 :(得分:3)
也许你想要这样的东西:
char c;
char array[100]; // Allocate space for 100 chars
char* line1 = array; // Pointer to allocated memory block
int i = 0;
while ((c = getchar()) != EOF)
{
*(line1+i) = c;
i++;
// Exit when i == 100
}
答案 1 :(得分:0)
你永远不会给line1分配一个地址,即指向某个地方或分配一个它所指向的缓冲区。
答案 2 :(得分:0)
如果你没有正确初始化line1,那么它就无法工作。
尝试char line1[500];
代替char* line1;
- 仅限测试;如果你输入超过500个字符,它仍然会崩溃。
答案 3 :(得分:0)
Line1未初始化任何内容。它所指的地址是未定义的。
在C,(或C ++)中,当您将变量声明为指针类型时,不会自动为变量分配有效地址。 这样的事情。
DataType *a_certain_ptr;
您认为a_certain_ptr包含什么?另一个例子可能会给你一个提示。
int a_certain_number; // this line is in some function.
a_certain_number的价值是什么?
不难发现a_certain_number可以是任何东西,它是未初始化的,因此它的值未定义。 它可以等于1,-1或15033等。
同样适用于a_certain_ptr。现在这个变量,因为你没有初始化它,可以包含任何值。它可以是1,-1,353210,甚至可能是指向堆栈某处的有效地址......
稍后当你试图执行
时*(line1+i) = c;
你指的是 i * sizeof(char)字节偏移的无效地址,这仍然是无效的....