Matlab有一个叫做的函数setappdata
.从本书(关于缓存的章节)我已经了解到缓存数据可以使用setappdata
神秘对象0 存储,如下所示:
setappdata(0,'CachedData',[0 1 2 3]) % I am caching vector [0 1 2 3]
Run Code Online (Sandbox Code Playgroud)
问题是,对象0是什么?
我正在哈佛大学攻读 MOOC课程CS50.我的最后一个讲座是关于内存分配和指针(两个对我来说绝对新的概念).
所教的是malloc(10*sizeof(char))
在堆上分配足够的字节来存储10个字符并返回指向第一个字节的指针,该指针可以保存在另一个变量中,如下所示char *x = malloc(10*sizeof(char))
.为了释放内存,人们会使用free(x)
.
但还有另一种方法可以让计算机保留足够的内存来存储10个字符,即char c[10]
.
c
也是一个类型的指针char*
?char c[10]
还保留内存堆中的malloc
呢?char c[3] = "aaa";free(c);
返回运行时错误; 所以我似乎无法释放我分配的内存char c[3]
.这是为什么?我真的很感激为那些刚学过指针的人量身定做的答案.
我==
对 C中运算符的确切含义有点困惑。
它是比较变量代表的数学值(取决于它们的类型)还是变量背后的位模式?具体来说:
int x = 0x80000000;
unsigned y = x;
x==y // true
Run Code Online (Sandbox Code Playgroud)
因此,尽管 x 是一个很大的负值而 y 是一个很大的正值,但它们是相等的(我猜是因为它们具有相同的位模式)。
int64_t x = 0x8000000000000000;
int y = x;
x==y // false
Run Code Online (Sandbox Code Playgroud)
这里 x 和 y 中的第一个(最低有效)32 位是否相同并不重要。因此,在这种情况下,C 看起来像是在查看变量表示的值。
官方规则是什么,是否有权威参考(在 K&R 中没有发现任何有用的信息)?
我gcc
在上面的例子中使用了编译器。
在阅读K&R(第6.5节,第二版)时,我遇到了以下功能:
struct tnode *talloc(void)
{
return (struct tnode *) malloc( sizeof(struct tnode) );
}
Run Code Online (Sandbox Code Playgroud)
该函数分配一些空格来存储struct tnode.我只是想通过询问我是否会达到以下目的来检查我的理解:
struct tnode *talloc(void)
{
struct tnode s;
return &s;
}
Run Code Online (Sandbox Code Playgroud)