我正在学习基本的bash脚本。
假设这样一个极小的代码:
$ for i in draft/*; do
file $i;
done
draft/first.html: ASCII text
draft/second.html: ASCII text
draft/third.html: ASCII text
我注意到了$i,前缀$ to i,很可能是C的*指针,指向对其值的取消引用。
bash脚本中的变量是指针吗?还是在C细节中作为指针实现?
我不得不编写一个C程序,它有600多行代码和大约25个函数。这是我编写的最长的C代码。
我注意到其中一些函数有5个以上的参数。直接从main()调用的对象有更多的参数。它离main()越远,就越少。
我还注意到,我经常不得不将参数传递给函数,并不是因为该函数直接使用该参数,而是该函数调用了另一个需要该参数的函数。
所以看起来就像
void f1(int a, int b,..., int bar){
int foo = f2(bar); // the only time 'bar' is used in f1
.
.
.
}
我试图最小化全局变量
我使用了一些内置的函数fun(void **args),并通过参数fun(args);调用这个函数,那么void **args是什么意思,以及如何检查args在C中的值是什么。
void GetValues(void ** args, nsString sToken, int iTokenNo)
{
printf("Token is : %s and Token no is %d ",sToken,iTokenNo);
NSLog("Token Name %s and Token no is %d",sToken,iTokenNo);
}
在
我的代码在c和c++中的行为是不同的。
void *(*funcPtr)() = dlsym(some symbol..) ; // (1) works in c but not c++
int (*funcPtr)();
*(void**)(&funcPtr) = dlsym(some symbol..) ; // (2) works in c++
我不明白为什么第二次铸造工作在c++,而第一次铸造不工作在c++。在c++中,(1)显示的错误消息从void*到void*()的转换是无效的。
我正在为一种"c-like"语言编写编译器。目前,编译器支持局部作用域中的数组。可以使用括号表示法-a[0], a[1],...来访问数组的每个元素。为了支持这种数据结构,使用符号表来跟踪当前作用域中的符号以及下一个可用内存空间的地址。为了进行演示,请考虑以下代码:
int a[5]; int b;
使用堆栈实现,并给出一个4字节对齐的内存:为了访问,例如元素a[1],我计算内存位置为
element = ((index+1) * 4) + a.Address; // a.Address is the address of a, which is stored in the s
在WinCrypt.h中,我看到:
#define CERT_CHAIN_POLICY_SSL ((LPCSTR) 4)
WINCRYPT32API BOOL WINAPI CertVerifyCertificateChainPolicy(
IN LPCSTR pszPolicyOID,
IN PCCERT_CHAIN_CONTEXT pChainContext,
IN PCERT_CHAIN_POLICY_PARA pPolicyPara,
IN OUT PCERT_CHAIN_POLICY_STATUS pPolicyStatus
);
第一个
该函数需要一个指向二维数组[4][5]的指针.实际上,我们可以提交一个指向一维数组[20]的指针.Ie源代码如下所示:
extern f (int a[4][5]);
int b[20];
void func (void)
{
f (b);
}
这是完美的工作代码(如果内部的数组b,我们将像他们在一个二维数组的布局)。不过,汇编将发出警告(由于类型不足):
$ gcc t.c -c
t.c: In function 'func':
t.c:7: warning: passing argument 1 of 'f' from incompatible poin
以下情况:
class Main{
void MainMethod(){
C * c;
B * b = new B();
b->fillC(c);
}
};
class B{
void fillC(C* c){
c = new C();
}
};
class C{
};
在我的软件中,我遇到了这种情况。在程序的末尾,类Main的c仍然是空的。为什么会这样呢?
前几天我问过这个问题,但并不是很具体,所以我想重新澄清一下。
我正在创建一个Android应用程序,它使用使用NDK的C语言中的现有库。我遇到的问题是C代码使用了很多java没有使用的东西(函数指针作为参数是一个大问题)。
无论如何,我想知道是否可以用我的Java代码编写C代码调用的函数。现在据我所知,你可以做到这一点,所以如果没有人回答‘是的,你可以,链接’,我将非常感激。我一直在研究它,但实际上需要做什么是我无法理解的。
有人能试着解释一下这个过程吗?我知道这涉及到在C代码中创建一个JVM;任何帮助新手站稳脚跟的信息都将不胜感激。
谢谢
编辑:
所以,我不知道这三个步骤该怎么做。
To c