所以我有一个名为 User_1 的父类,User_1 的 init 方法如下所示:
class User_1(object):
def __init__(self, user_id, bio="", likes=0, uploads={}, follows=0, dateJoined=None, accountType=""):
self.user_id = user_id
self.bio = bio
self.likes = likes
self.uploads = uploads
self.follows = follows
self.dateJoined = dateJoined
self.accountType = accountType
self.comments = []
self.responseCommentsCount = 0
Run Code Online (Sandbox Code Playgroud)
然后,我有一个继承自 User_1 类的类,称为 TrendingUsers,它的 init 方法如下所示:
class TrendingUser(User_1):
def __init__(self, user_id):
User_1.__init__(self, user_id)
self.averageTSWords = 0.0
self.averageSSWords = 0.0
self.percOfClipTitlesUntitled = 0.0
self.percOfClipsWithCaptions = 0.0
self.percOfClipsWithTags = 0.0
self.percOfClipsWithComments = 0.0
self.percOfPurgatoryClips = 0.0
self.averageTimeDifferenceBetweenUploaded = …
Run Code Online (Sandbox Code Playgroud) 我正在观看有关指针和内存的视频,我很困惑,因为我认为内存地址是 1 字节,但在视频中他说它们是 32 位(4 字节),如果我们有的话,int a = 2
它将存储在一个内存中地址,但是整数不会存储在 4 个独立的内存地址中,因为它们的最大长度为 4 个字节?
我的问题:
int
float
char
str
这些 var 类型都有为其分配的标准化字节分配。但我从来没有了解过这一点的指针:
这些“地址”存储变量,其内容看起来只是一系列字母数字字符。
C++代码:
int *ptr1;
char *ptr2;
void *ptr3;
Run Code Online (Sandbox Code Playgroud)
那么上面列出的指针的标准内存分配是什么呢?一般来说呢?
据我所知:
我不确定我是否正确,因为这些术语非常相似,有时我很难提及正确的事情。
我有一个 C++ 代码,它将指针地址作为参数。代码参数是:
./主0x7fad529d5000
现在,在读取参数时,该值将作为字符串读取。
如何将字符串“0x7fad529d5000”转换为地址?
我的一个朋友给我提出了这个问题,请我帮忙解决:运行这段代码后,指针 p 中记录的地址将是哪个?
unsigned * p = (unsigned*)1000;
p += 10;
Run Code Online (Sandbox Code Playgroud)
我刚刚继续使用 CodeBlocks 并添加到这个练习中printf("%u", p);
,答案是 1040。
什么是(unsigned*)1000
,什么意思?打印记住的地址的正确方法是printf("%u", p)
,还是需要使用另一种语法/另一种格式说明符?而且,为什么答案是 1040,而不是 1010?
主要问题,唯一给出的行是:
unsigned * p = (unsigned*)1000;
p += 10;
Run Code Online (Sandbox Code Playgroud)
基于这些,我做了一些谷歌研究,我认为获取地址的正确方法是将printf("%u", p);
. 即使这是正确的并且这是正确的语法,我仍然无法理解此添加背后的过程。
我按照本教程(纯c ++)在Objective-c和C中创建.obj加载器.但是我注意到fscanf()
即使你没有向它发送它要设置的变量的内存地址(仅发送值),该函数也能正常运行.对此有解释吗?
Vec2 *uv;
fscanf(file, "%f %f\n", uv.x, uv.y);
[tempUVs addObject:uv];
Run Code Online (Sandbox Code Playgroud)
请注意,参数uv.x和uv.y没有符号.
我的第一个理解是cout指向终端的输出,但我不知道这是否正确.
也许它是一些内存地址,它不是终端的输出,而是连接到它.
我很困惑,任何澄清都会非常感激.
编辑:
当我这样做std::cout << std::cout;
输出是0x467f84
,它是一个地址,对吧?
代码很简单但我不明白它是如何工作的.所有三个变量似乎都存储在同一个地址,也许str1只是str [0]的别名,但是当我尝试取消引用它们时,我会得到不同的结果.
#include <stdio.h>
int main() {
char str1[] = "Hello";
printf("<========Addresses: =======> \n");
printf("%d\n", &str1[0]);
printf("%d\n", &str1);
printf("%d\n", str1);
printf("<========Values stored at the address(?!)=======> \n");
printf("%d\n", *(&str1[0]));
printf("%d\n", *(&str1));
printf("%d\n", *str1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这就是它打印的内容.
<========地址:=======>
6356458
6356458
6356458
<========值>存储在地址=======>
72
6356458
72
我可以从静态 JNI 字段获取数据的内存地址吗?
比如我有2种情况:
第一的:
jclass clazz = ...;
jfieldID staticFiled = ...; // static field on java object
uintptr_t *staticFiledPtr = ((uint64_t) staticFiled); // get field ptr
jboolean *boolPtr = *magic code with static field*;
*boolPtr = true;
Run Code Online (Sandbox Code Playgroud)
第二:
jclass clazz = ...;
jfieldID staticFiled = ...; // static field on java object
uintptr_t *staticFiledPtr = ((uint64_t) staticFiled); // get field ptr
jobject *objectPtr = *magic code with static field*;
jobject object = *objectPtr;
Run Code Online (Sandbox Code Playgroud)
这些例子非常简单。我只想获取静态字段数据的内存地址,而不使用 GetStaticObjectField 等。这可能吗?
memory-address ×10
pointers ×5
c ×4
c++ ×4
allocation ×1
arrays ×1
assembly ×1
cout ×1
dictionary ×1
field ×1
inheritance ×1
java ×1
objective-c ×1
python ×1
python-2.7 ×1
unsigned ×1