在Zed Shaw的"以艰难的方式学习C"中,练习9(http://c.learncodethehardway.org/book/ex9.html)有一个额外的学分问题我觉得很有趣.他定义了一个4字符数组,并要求读者弄清楚如何将该数组用作4字节整数.
在这一点上,我知道这很危险,我认为答案是这样的:
#include <stdio.h>
int main(int argc, char *argv[])
{
char name[4] = {'A'};
int *name_int;
name_int = &name;
printf("%d", *name_int);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的想法是,如果我创建一个int指针,其值为数组的地址,int类型将使用该地址中的数据字节,然后是可用的下一个3字节数据.在我有限的理解中,我的印象是int和数组都会以相同的方式使用内存:从任意内存地址开始,而不是按顺序使用下一个地址,依此类推.
但是,这个输出并不是我的预期:我得到'A'的ascii值.对我来说,似乎表明我的解决方案是错误的,我理解如何处理内存是不正确的,或两者兼而有之.
怎么能完成这个小小的黑客攻击呢?我哪里出错了?我希望通过更好地理解指针和引用如何工作以及如何存储和使用内存来远离这一点.
谢谢!
我试图弄清楚如果行的某个变量具有某个值,如何从表中提取行。我知道如何在 R 中做到这一点,但在 Matlab 中无法弄清楚。例如,假设这是我的表:
Var1 Var2 Var3
_____ _____ ______
1.0 2.0 'class 1'
1.1 2.1 'class 2'
1.2 2.2 'class 3'
1.3 2.3 'class 1'
Run Code Online (Sandbox Code Playgroud)
我试图弄清楚如何获取 Var3 具有“class 1”值的所有行。具体来说,我想要这个:
Var1 Var2 Var3
_____ _____ ______
1.0 2.0 'class 1'
1.3 2.3 'class 1'
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经使用关键字参数,在列出试过这个帖子,以及使用MATLAB行,试图排序一切。两者都没有奏效。
假设 T 是我的桌子。首先,我试过
T(T.Var5 == 'class 1',:)
Run Code Online (Sandbox Code Playgroud)
但得到了错误:
Undefined operator '==' for input arguments of type 'cell'.
Run Code Online (Sandbox Code Playgroud)
然后,我决定发挥一点创意,看到您可以在 Matlab 文档中创建行名称。所以我这样做了:
A = T{:,{1:2}};
B = T{:,{3}};
B = table2array(B);
A.Properties.RowNames = B; …Run Code Online (Sandbox Code Playgroud)