小编Iva*_*van的帖子

C void指针算术

我认为在gcc中,void*和char*在指针运算方面的处理方式相同,即void*"指向"内存中的单个字节,因此下面的代码

void *p;
p = malloc(sizeof(void));
printf("%p %p\n",p,p+1);
Run Code Online (Sandbox Code Playgroud)

确实回来了0x984a008 0x984a009.类似地,void**指向一个指针,因此增加1实际上意味着增加4个字节(在32位OS上),即

void **p;
p = (void **) malloc(sizeof(void *));
printf("%p %p\n",p,p+1);
Run Code Online (Sandbox Code Playgroud)

回报0x984a008 0x984a00c.但是,以下代码让我感到困惑

void **p, *p1;
p = (void **) malloc(sizeof(void *));
p1 = (void **) p;
printf("%p %p\n",p1,p1+1);
Run Code Online (Sandbox Code Playgroud)

因为它又回来了0x984a008 0x984a009.这里发生了什么?

c pointers

5
推荐指数
2
解决办法
3921
查看次数

Java:如果语句在无限循环中

我是Java的新手,以下可能是显而易见的,但对我来说这很令人费解.请考虑以下代码:

while(1>0){
  if(x!=0){
  //do something
  }
}
Run Code Online (Sandbox Code Playgroud)

x变量在不同的线程中更改.但是,即使x不为零,也不会执行if语句中的代码.如果我通过以下更改代码

while(1>0){
  System.out.println("here");

  if(x!=0){
  //do something
  }
}
Run Code Online (Sandbox Code Playgroud)

当x不再为零时,现在执行if语句中的代码.我怀疑这与Java编译器的规则有关,但它对我来说非常混乱.任何澄清这一点的帮助将不胜感激.

java infinite-loop conditional-statements

4
推荐指数
1
解决办法
5935
查看次数

返回可变维矩阵的下标

我需要能够返回维度为LxLxL..xL的矩阵元素的索引[x1 x2 ... xd].维数d是提供给我的函数的变量.矩阵不存在,而是我有一个长度为L ^ d的线性阵列.对于数组中的给定索引i,我想知道矩阵中的等价索引.我已经可以使用一个简单的for循环来做到这一点,但我很想知道我是否可以某种方式使用ind2sub.我遇到的问题是,如果我这样做

x=zeros(1,d)
x=ind2sub(L,i)
Run Code Online (Sandbox Code Playgroud)

x被重新分配一个数字而不是所有下标的数组.有办法做到这一点吗?

matlab octave

2
推荐指数
1
解决办法
1297
查看次数

Python不打印换行符

我的脚本似乎在我最新升级后停止工作.为了找到问题,我写了一个小脚本:

import subprocess

hdparm = subprocess.Popen(["xargs","echo"],
                stdin=subprocess.PIPE)

hdparm.stdin.write("Hello\n")
hdparm.stdin.write("\n")
hdparm.stdin.close()
hdparm.wait()
quit()
Run Code Online (Sandbox Code Playgroud)

这只是打印"Hello"和一个新行,但我希望有两个新行.是什么导致了这个?(我现在使用的是2.7.3)

编辑:这是有问题的脚本(为清晰起见编辑):

hdparm = subprocess.Popen(["hdparm", "--please-destroy-my-drive", "--trim-sector-ranges-stdin", "/dev/sda"],
               stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
hdparm_counter = 0
for rng in ranges_to_trim:
    hdparm.stdin.write("%d:%d\n" % (rng["begin"],rng["length"]))
    hdparm_counter += 1
    if hdparm_counter > 63:
         hdparm.stdin.write("\n")
         hdparm_counter = 0
if hdparm_counter != 0:
    hdparm.stdin.write("\n")
hdparm.stdin.close()
hdparm.wait()
Run Code Online (Sandbox Code Playgroud)

编辑:我认为问题在于我的脚本本身.我需要将EOF发送到hdparm以使其做任何应该做的事情.

python

0
推荐指数
1
解决办法
180
查看次数