Ibu*_*idu 8 c++ pointers char type-mismatch dereference
我想了解指针是如何工作的,所以我创建了这个小程序.首先,我创建了一个指向char的ap指针.
第一个问题是在这一点上.如果我创建一个指针,它的值是一个memoryaddress(如果我指向一个非指针对象),但这次它在我的例子中是"哈哈".为什么它在char*中以这种方式工作?我怎么能用cin >> p增加它的价值呢?
我的第二个问题是,我创建了一个aq char,它在我创建它的点上具有*p指针的值.但它的价值和地址也是"h",但为什么呢?它必须是此char对象的内存地址!这没有意义:D(mingw - gcc)
#include <iostream>
int main()
{
/* char *p;
cin >> p; //forexample: haha */
char * p = "haha";
char q = *p;
std::cout << "&q = " << &q << std::endl; //&q = h
std::cout << "q = " << q << std::endl; //q = h
return 0;
}
Run Code Online (Sandbox Code Playgroud)
更多:如果我首先使用char a [100]分配内存; char*p = a; 然后&q = h»ŢĹ,所以"h"和一些混乱.但它应该是一个记忆地址!我的问题是,为什么不解决呢?
想想char* p;
内存中的地址.你没有初始化这个指针,所以它没有指向任何东西,你不能使用它.
总是安全:
要么将指针初始化为零:
char *p = 0; // nullptr in C++11
Run Code Online (Sandbox Code Playgroud)
或初始化为一些自动
void foo() {
char a[100];
char *p = a;
}
Run Code Online (Sandbox Code Playgroud)
或全球记忆:
char a[100];
void foo() {
char *p = a;
}
Run Code Online (Sandbox Code Playgroud)
或者获得动态记忆:
char* p = new char [100];
Run Code Online (Sandbox Code Playgroud)
然后你可以使用p(如果不是NULL)读取数据并从p读取...
因为你的误会operator >> (std::istream&, char* p)
.这个操作符期望p
指向一些内存(自动,全局,动态 - 无论如何) - 它本身不分配内存.它只是从输入流中读取字符直到空白并将其复制到指向的内存p
- 但p
必须已经指向某个内存.
为了获取地址char q;
.当然,你可以采取的地址q
:&q
,它的类型是char* p
.但是&q
是不同的p
,这q=*p
只是复制的第一个字符指出通过p
对q
,它不能改变地址q
-其地址是不变的.For cout << &q
- operator << (ostream&, char* p)
期望p
指向NULL终止字符串 - 并&q
指向包含"H"
但不知道这个字符后面的内容 - 所以你会在屏幕上得到一些垃圾.使用cout << q
打印单个字符.
归档时间: |
|
查看次数: |
56763 次 |
最近记录: |