指针指向数组中的下一个元素,但地址是相同的.如何
Pointer points to a next element in array, but address is the same. How?
我在采访中被问到这个问题。我知道它将字符从a到s复制到遇到空字符。因此,我相信指针A和S指向的地址也会改变。
#include <iostream>
using namespace std;
static char s[15];
static char a[] = "giviwfovnsn212";
void myfunc(char*s, char*a){
while(*s++=*a++){
cout<<&a<<" "<<&s<<" "<<*a<<endl;
}
return;
}
int main() {
myfunc(s,a);
cout<<a<<" "<<s;
return 0;
}
但是我得到以下输出:
0xbf85b7d4 0xbf85b7d0 i
0xbf85b7d4 0xbf85b7d0 v
0xbf85b7d4 0xbf85b7d0 i
0xbf85b7d4 0xbf85b7d0 w
0xbf85b7d4 0xbf85b7d0 f
0xbf85b7d4 0xbf85b7d0 o
0xbf85b7d4 0xbf85b7d0 v
0xbf85b7d4 0xbf85b7d0 n
0xbf85b7d4 0xbf85b7d0 s
0xbf85b7d4 0xbf85b7d0 n
0xbf85b7d4 0xbf85b7d0 2
0xbf85b7d4 0xbf85b7d0 1
0xbf85b7d4 0xbf85b7d0 2
0xbf85b7d4 0xbf85b7d0
giviwfovnsn212 giviwfovnsn212
地址都是一样的,如何发生?
所以我相信指针A和S指向的地址也会改变。
您的推理是正确的。他们指向的地址
地址都是一样的,如何发生?
因为操作员的地址为您提供了存储变量的地址。由于存储指针的位置不会更改,因此您打印的地址也不会更改。
当我使用COUT完成复制后输出MyFunc中的字符串时,它会显示完整的字符串。为什么会发生?指针不应该指向字符串末端的位置吗?
在myfunc
的末尾,指针将指向缓冲区的一个。在分配的内存之外访问内存具有未定义的行为。
上一个答案是正确的,但此外:
如果要打印出S和A的地址,则实际上需要做
cout&lt;&lt;(int)a&lt;&lt;"&lt;&lt;(int)s&lt;&lt;"&lt;&lt;*a&lt;&lt;endl;
否则,它仍将被解释为字符串 - 不是地址。
或更好的仍然
cout&lt;&lt;std :: hex&lt;&lt;(int)a&lt;&lt;"&lt;&lt;std :: hex&lt;&lt;(int)s&lt;&lt;"&lt;&lt;*a&lt;&lt;endl;
回复:
当我使用Cout完成复制后输出MyFunc的字符串时,它将显示完整的字符串
您需要了解您的myfunc(char* s,char* a)函数参数与您的's'和a a'全局静态不同是不同的变量 - 并且您正在通过value - 通过 - 因此,即使在MyFunc中,您也在更改" S"answers" A",它不会影响" S"answers" A"。
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- 如何获取C++字符数据类型的地址
- 如何读取特定地址的进程内存?
- 如何从绝对地址的 C 样式指针创建对C++对象的引用
- 如何防止矢量的内存地址更改
- 如何运行外部程序,向其传递内存地址以读取/写入?
- 如何访问头文件中类的组件并打印它们的地址?
- 如何在不为其声明变量的情况下获取和使用常量值的地址?
- 如何理解智能指针的底层指针地址?
- 如何找到在本地范围内声明的变量的地址?
- 16 位系统中的程序如何访问大于 65535 的整数,但不能访问地址
- 如何按顺序或在指定的地址分配内存?
- C++ / Qt:如何检测主机名或IP地址何时引用当前系统?
- 如何从内存中分配GDI+ POINT类地址?
- 如何定义全局函数指针并分配给特定地址
- 我可以直接为指针分配地址吗?如果是,如何做到这一点
- 变量地址的运算符[]是如何工作的
- 如何为DNS查找反向IPv6地址-C++
- c++如何获取模板函数实例的地址