指针变量名返回的值是多少?
What's the value returned by pointer variable name?
我不明白为什么以下代码分别产生以下输出:
char c[ 5 ] = { 'H', 'e', 'l', 'l', 'o' };
char* pc = c;
std::cout << pc;
我需要理解这一点,因为我正在做一个练习,我需要通过一个指向该数组的指针找到数组的索引。在网上,我找到了一个类似下面的代码,但我不明白它的结果,虽然它解决了我的问题,但我相信如果我理解上面的代码我就能理解这个:
char c[ 5 ] = { 'H', 'e', 'l', 'l', 'o' };
char* pc = &c[2];
int index = pc - c;
std::cout << index; // 2
您的字符串不是 null-terminated,因此 <<
一直输出 "Hello"
之外的字符,直到它在内存中找到 '[=15=]'
甚至崩溃。试试这个:
char c[6] = { 'H', 'e', 'l', 'l', 'o', '[=10=]' };
char* pc = c;
std::cout << pc;
或者,如@n.m。建议:
char c[] = "Hello";
char* pc = c;
std::cout << pc;
I believe that if I understand the above code I could understand this:
char c[ 5 ] = { 'H', 'e', 'l', 'l', 'o' };
char* pc = &c[2];
int index = pc - c;
std::cout << index; // 2
这里,pc
是一个 char
指针,指向比 c
高 2 x char
的内存地址。减去这 2 个指针得到 2.
做std::cout << pc;
或std::cout << c + 2
; (c[6]
)
将给出:llo
作为输出。
当您 stream <<
一个指向 char 的指针时,它会打印字符,直到遇到值为 0 的字符。在您的情况下,它永远不会打印(直到它超出数组边界),这是未定义的行为。
尝试
char c[6] = { 'H', 'e', 'l', 'l', 'o', 0 };
顺便说一句,您可以(并且可能应该)直接用字符串文字初始化一个 char 数组!
char c[] = "Hello";
这将自动处理 null-termination,如果您为数组指定的维数太小,编译器会报错。
char c[5] = "Hello"; //ERROR
我不明白为什么以下代码分别产生以下输出:
char c[ 5 ] = { 'H', 'e', 'l', 'l', 'o' };
char* pc = c;
std::cout << pc;
我需要理解这一点,因为我正在做一个练习,我需要通过一个指向该数组的指针找到数组的索引。在网上,我找到了一个类似下面的代码,但我不明白它的结果,虽然它解决了我的问题,但我相信如果我理解上面的代码我就能理解这个:
char c[ 5 ] = { 'H', 'e', 'l', 'l', 'o' };
char* pc = &c[2];
int index = pc - c;
std::cout << index; // 2
您的字符串不是 null-terminated,因此 <<
一直输出 "Hello"
之外的字符,直到它在内存中找到 '[=15=]'
甚至崩溃。试试这个:
char c[6] = { 'H', 'e', 'l', 'l', 'o', '[=10=]' };
char* pc = c;
std::cout << pc;
或者,如@n.m。建议:
char c[] = "Hello";
char* pc = c;
std::cout << pc;
I believe that if I understand the above code I could understand this:
char c[ 5 ] = { 'H', 'e', 'l', 'l', 'o' }; char* pc = &c[2]; int index = pc - c; std::cout << index; // 2
这里,pc
是一个 char
指针,指向比 c
高 2 x char
的内存地址。减去这 2 个指针得到 2.
做std::cout << pc;
或std::cout << c + 2
; (c[6]
)
将给出:llo
作为输出。
当您 stream <<
一个指向 char 的指针时,它会打印字符,直到遇到值为 0 的字符。在您的情况下,它永远不会打印(直到它超出数组边界),这是未定义的行为。
尝试
char c[6] = { 'H', 'e', 'l', 'l', 'o', 0 };
顺便说一句,您可以(并且可能应该)直接用字符串文字初始化一个 char 数组!
char c[] = "Hello";
这将自动处理 null-termination,如果您为数组指定的维数太小,编译器会报错。
char c[5] = "Hello"; //ERROR