在Java中我们通常会这样做:
Class myObject = new Class();
Run Code Online (Sandbox Code Playgroud)
因为new关键字返回一个地址.
但为什么我们这样做呢?:
String myString = "Hello";
Run Code Online (Sandbox Code Playgroud)
仿佛String是一个原始人?
我向老师问了这个问题,他回答说这是因为引号中的内容相当于一个地址,但他不确定.你确定吗?
"Hello"是否存储在String类的实例变量中?
看看这段代码:
#include<iostream>
enum class DataStructure{stack,queue};
template <typename T>
T foo(DataStructure ds){
if(ds == DataStructure::stack){
return 1;
}
else if(ds == DataStructure::queue){
return 3.14F;
}
}
int main(){
std::cout<<foo(DataStructure::stack);
}
Run Code Online (Sandbox Code Playgroud)
显然它不编译,给error: no matching function for call to ‘foo(DataStructure)’
但是你明白我想做什么,有没有办法做到这一点?基本上foo必须返回不同的对象或基本类型,具体取决于enum.
我为基本问题道歉。
在这里观看:
struct mystruct{
int a;
int b;
};
int main(void){
struct mystruct* ptr;
ptr = malloc( 10*sizeof( struct mystruct ) );
Run Code Online (Sandbox Code Playgroud)
这样我就分配了一个struct数组.如果你试图打印,例如ptr [4],你会注意到一个指针.当我有一个指针并且我可以访问一个成员时,我必须使用 - >运算符吗?但如果我这样做:
ptr[4]->a
Run Code Online (Sandbox Code Playgroud)
它不起作用!我必须这样做
ptr[4].a
Run Code Online (Sandbox Code Playgroud)
让它工作......为什么?我有一个指针!ptr [4] =(ptr + 4)对吗?
在正常数组中也会发生这种情况
struct mystruct array[10];
array[4].a
Run Code Online (Sandbox Code Playgroud)
但是数组是一个指针!