我正在使用C++来理解指针是如何工作的.我有这段代码使用数组,我只是用它来理解等价物如何与指针一起工作.
int main() {
int arr[10] = {1,2,3};
char arr2[10] = {'c','i','a','o','\0'};
cout << arr << endl;
cout << arr2 << endl;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,arr
输出整数数组的第一个元素的地址(如预期的那样),但arr2
不输出字符数组的第一个元素的地址; 它实际上打印"ciao".
我错过了什么或者我还没有学到这个?
为什么
#include <iostream>
using namespace std;
int main() {
cout << (char*)0x10 << endl;
}
Run Code Online (Sandbox Code Playgroud)
但是,段错误
#include <iostream>
using namespace std;
int main() {
cout << (void*)0x10 << endl;
}
Run Code Online (Sandbox Code Playgroud)
似乎工作得很好?
下面的int和char数组有什么区别:
int main()
{
int numbers[] = {2,1,3};
char letter[] = {'a','b','\0'};
cout<< numbers<<endl;
cout<< letter<<endl;
}
Run Code Online (Sandbox Code Playgroud)
输出:
0x22ff12 // an address
ab
Run Code Online (Sandbox Code Playgroud)
为什么不显示213?我知道数组的名称将指向其第一个元素的地址,但为什么char数组显示不同的行为?
char p;
cout << &p;
Run Code Online (Sandbox Code Playgroud)
这不会打印字符p的地址.它打印一些字符.为什么?
char p;
char *q;
q = &p;
cout << q;
Run Code Online (Sandbox Code Playgroud)
即使这样也没有.为什么?
我正在研究一个使用指针的字符串类,我在理解我的print
函数在这里工作时遇到了一些困难.具体来说,为什么cout << pString
输出字符串而不是它指向的动态数组的内存地址?我的理解是变量pString是一个指针.
class MyString
{
public:
MyString(const char *inString);
void print();
private:
char *pString;
};
MyString::MyString(const char *inString)
{
pString = new char[strlen(inString) + 1];
strcpy(pString, inString);
}
void MyString::print()
{
cout << pString;
}
int main( )
{
MyString stringy = MyString("hello");
stringy.print();
return 0;
}
Run Code Online (Sandbox Code Playgroud) 最近,我看了一个视频,其中说当我定义一个整数数组时
int my_array[] = {1,2,3};
Run Code Online (Sandbox Code Playgroud)
然后我打印了 my_arraycout << my_array;
然后我会得到内存中第一个整数的地址,但是当我们定义一个字符数组时
char my_string[] = "Hello";
Run Code Online (Sandbox Code Playgroud)
然后当我尝试打印 my_string 时,cout << my_string
它返回Hello
,当我们定义一个指向字符的指针时,它与指针类似
char mystring[] = "HELLO";
char *my = mystring;
cout << my << endl;//HELLO
Run Code Online (Sandbox Code Playgroud)
我们尝试打印返回字符串的指针变量。
现在我读了这篇文章,我读到这个字符串带着他的内存地址。但是我仍然无法弄清楚为什么它们不相同以及为什么字符数组打印字符串文字而 int 数组打印第一个的地址。
提前致谢。
c++ arrays pointers operator-overloading implicit-conversion
下面的代码打印整个字符串.我很困惑为什么会这样做.
char test[] = "jeff";
cout<<test<<endl;
Run Code Online (Sandbox Code Playgroud)
输出是"Jeff",我期望它打印char数组"test"的值,因为test是指针,指针是'J'的第一个元素.
为什么我打印整个字符串,当我cout<<test
?
我不知道为什么这段代码会给出结果.我认为指针p
应该是地址,str
输出应该始终是while循环中的地址.为什么结果是那样的真正价值str
?
char str[] = "we are poor students";//???????
cout<<str<<endl;
char *p = str;
while (*p != '\0')
{
cout << p<<endl;
p++;
}
return 0;
Run Code Online (Sandbox Code Playgroud)
这是它给出的结果:
Run Code Online (Sandbox Code Playgroud)we are poor students we are poor students e are poor students are poor students are poor students re poor students e poor students poor students poor students oor students or students r students students students tudents udents dents ents nts ts s
当我运行以下代码时:
int i[] = {1,2,3};
int* pointer = i;
cout << i << endl;
char c[] = {'a','b','c','\0'};
char* ptr = c;
cout << ptr << endl;
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
0x28ff1c
abc
Run Code Online (Sandbox Code Playgroud)
为什么int指针返回地址,而char指针返回数组的实际内容?
例如,我有以下字符串:
std::string s = "Hello, World!"
Run Code Online (Sandbox Code Playgroud)
我想要的地址中最后一个元素的s
它'!'
.
我尝试了以下代码,但它似乎没有输出我想要它.
std::cout << &s[s.length() - 1];
Run Code Online (Sandbox Code Playgroud)
那输出'!'
不是它的地址,同样的情况发生s.back()
是因为格式化引起的std::cout
或其他地方的问题?
基本上我想要一个函数,它输出字符串中最后一个(如果可能的话,第一个)元素的地址.