关于C编程语言(ANSI-C)的一个简单问题:
C中的多维数组是锯齿状的吗?
我的意思是 - 我们在谈论"数组数组"(一个指向内存中其他地址的指针数组),或者这只是"长一维数组"(它是按顺序存储在内存中)?
困扰我的是我有点确定:
matrix[i][j] 相当于 * ( * (matrix + i) + j)
我正在尝试在C程序中使用system()函数.
例如,我尝试使用system()函数在桌面上创建一个目录.
我的代码:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
system("cd c:\\Users\\USER\\Desktop");
system("mkdir test");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,会创建一个目录,但不会在我的桌面上创建.它是在我的项目目录中创建的.
为什么会这样?
我可以在system()函数中使用cd命令吗?如果没有,是否可以替换将与system()一起使用的cd命令?
我正在使用Windows操作系统.我正在尝试使用来自C程序的system(),因为我使用的是cmd程序.
我知道我可以使用WinAPI创建目录而没有任何问题.我不想使用WinAPI,我的问题是如何使用system()使其工作.
关于螺纹二进制搜索树的解释(如果你知道它们,请跳过它):
我们知道在具有n个节点的二叉搜索树中,有n + 1个左右指针包含null.为了使用包含null的内存,我们按如下方式更改二叉树 -
对于树中的每个节点z:
如果left [z] = NULL,我们在left [z]中输入tree-predecessor(z)的值(即指向包含前任键的节点的指针),
如果right [z] = NULL,我们在右[z]中输入tree-successor(z)的值(同样,这是指向包含后继键的节点的指针).
像这样的树称为线程二进制搜索树,新链接称为线程.
我的问题是: 螺纹二进制搜索树的主要优点是什么(与"常规"二叉搜索树相比).在网上快速搜索告诉我,迭代地实现有序遍历有助于,而不是递归地实现.
这是唯一的区别吗?还有其他方法可以使用线程吗?
这是如此有意义的优势吗?如果是这样,为什么?递归遍历也花费O(n)时间,所以..
非常感谢你.
algorithm binary-tree asymptotic-complexity binary-search-tree data-structures
我在C中编写了以下代码:
#include <stdio.h>
#include <stdlib.h>
#define LEN 100
int main(void)
{
int arr[LEN];
int i;
for (i = 0; i < LEN; i++)
printf("%d ", arr[LEN]);
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
首先,请注意我故意访问不属于数组的内存(最后一个单元格将在索引中,LEN-1而我正在访问arr[LEN],而不是arr[i].
奇怪的结果是,当我运行程序时,它会打印0到... LEN-1之间的所有数字.例如,当LEN像这里定义为100时,输出为:
0 1 2 ..... 99
请运行该程序.你也遇到过这种情况吗?我认为这是与平台相关的行为.(如果相关,我在Windows 7上运行此代码.)
为什么arr [LEN]的值会发生变化?
我开始学习C(套接字)和Internet协议中的网络编程.
目前我专注于HTTP.
在使用C实现HTTP客户端的(非常)短暂体验期间,我发现有时您必须多次调用recv()才能从服务器获取整个消息 - 即使客户端没有向客户端发送消息服务器之间的单独调用recv().
例如:
当我尝试使用recv()调用实现HTTP客户端时,我只得到了标题(我想,我仍然是HTTP的新手).但是当我两次调用recv()时,我在第一次调用中获得了头文件,在第二次调用中获得了body(html代码).
这不是短缓冲区的问题,因为我使用的缓冲区足够长以容纳整个消息.
为什么会这样?虽然没有客户端发送的新数据,但客户端必须多次调用recv()的原因是什么?我认为如果客户端没有向服务器发送新数据,对recv()的调用将带来服务器的整个响应.
我不认为这是我的代码的问题,但如果你要问代码,我可以在这里发布它没有问题.我认为这是不必要的,如果我错了,请纠正我.
我不认为这是相关的,但我正在使用Winsock2.
我开始学习Assembly(ASM x86).我正在使用模拟器emu8086.我写了以下说明:
mov eax,3
Run Code Online (Sandbox Code Playgroud)
当我试图模仿指令时,emu8086写道: wrong parameters MOV eax,3. probably it's an undefined var: eax
此外,当我换成eax用ax,ah或al-它的工作就好了.
为什么会那样?我该怎么做才能解决这个问题?谢谢.
我正在学习P和NP.
我已经读过,确定给定数字是否为素数的问题是P中的一个问题,这意味着它有一个多项式时间算法来解决它.
我还读到这个事实在2002年被证明是AKS的算法.
众所周知,我们可以通过运行直到其平方根来确定特定数字是否为素数.
伪代码:
isPrime(N):
sqrt(N) <- squareRoot(N)
for i from 2 to Sqrt(N)
if (n mod i == 0)
return false
return true
Run Code Online (Sandbox Code Playgroud)
我的问题很简单:
为什么上面的算法不能证明这个问题在P?
谢谢 :)