在我拥有的源文件中有多次出现以下格式(注意def行后没有缩进):
def sendSystemParms2(self, destAddress, subid, state):
raw = sysparms_format2.build(Container(
length = 0x0D,
command = MT_APP_MSG_CMD0))
def method2(parm2):
print parm2
Run Code Online (Sandbox Code Playgroud)
它正在工作和运行.我很迷惑.任何提示?我不能上传图像,因为它是新的,没有足够的声誉,但我可以显示证据.
我有一个非常简单的程序如下:
int main()
{
char c;
while (c = getchar() != 'q')
printf("%c", c);
}
Run Code Online (Sandbox Code Playgroud)
运行此程序时遇到两个问题:
当我运行它时,它不打印c它已经得到的getchar().以下是输出示例:每行都是我的输入,但在获取后不会打印出来:
w
r
3
Run Code Online (Sandbox Code Playgroud)我已经定义q退出程序.但是当我运行它时,如果我输入多个字符并不重要.如果我输入一个包含其中q某个位置的字符串,它将退出该程序.例如,以下输入将结束它:
lqw
Run Code Online (Sandbox Code Playgroud)进入后如何getchar()回来?qlqw
当你声明一个函数指针时,我读到了,没有赋值给左手边或右手边.但是我在C源文件中有很多函数指针,并且所有函数都在下面的赋值形式中使用:
void (*pbindRemoveDev)( zAddrType_t *Addr ) = (void*)NULL;
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我理解(void*)NULL部分吗?
这是一个嵌入式代码.
我有一个4字节的十六进制数,当我将它转换为浮点数时它是-0.5(我检查了引用并且它是正确的),但是printf给出了非常错误的值:
int f=0xBF000000;
printf("%f",(float)f); // prints -1090519040.000000
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚这里有什么问题!所有计算器都给出了正确的值-0.5,但printf给出了上述值.
我正在阅读KR C书,我面对一个我不理解的功能定义.这是第87页的qsort()功能.它声明swap()函数内部的qsort()函数:
void qsort(args)
{
...
void swap(arguments);
...
swap(a,b);
}
void swap(arguments){
...
}
Run Code Online (Sandbox Code Playgroud)
不swap()应该在函数之外声明函数吗?为什么在qsort()函数内声明它?
假设我使用malloc以下命令在函数内创建变量:
int f()
{
int* i=(int*)malloc(sizeof(int));
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
变量在哪里i?在堆或函数f()堆栈中?
我在嵌入式代码中遇到了以下定义:
#define REG_ADD 0x20081004
#define pREG ((void * volatile *)REG_ADD)
Run Code Online (Sandbox Code Playgroud)
为什么有2个*在pREG定义?这是什么意思?
我已经阅读了几个嵌入式项目,并且在所有这些项目中,引导加载程序是用汇编而不是C编写的.这有什么理由吗?
我通过以下代码练习C:
char* streverse(char* s){
int len=strlen(s);
int i=0; int j=len;
char* r;
while(i<j){
s[i]=s[j];
i++; j--;
}
printf("\nReverse string is %s",s);
return r;
}
Run Code Online (Sandbox Code Playgroud)
但printf永远不会执行.如果我删除:
s[i]=s[j];
Run Code Online (Sandbox Code Playgroud)
printf执行.这很奇怪,因为尽管循环结束,但无论如何都与上述分配无关.任何线索为什么printf不执行上述赋值?
编辑:
现在通过更正printf签名进行打印.
我试图在我的64位机器上找到对齐方式(Intel iCore7上的Win10).我想到了这个实验:
void check_alignment(char c1, char c2 )
{
printf("delta=%d\n", (int)&c2 - (int)&c1); // prints 4 instead of 8
}
void main(){
check_alignment('a','b');
}
Run Code Online (Sandbox Code Playgroud)
我在期待delta=8.因为它是64位机器char c1,char c2应该存储在8的倍数.不是吗?
即使我们假设编译器已经进行了优化以将它们存储在更小的空间中,为什么不将它们背靠背存储delta=1呢?为什么4字节对齐?
我用float类型重复了上面的实验,但仍然给出了delta=4
void check_alignment(float f1, float f2 )
{
printf("delta=%d\n", (int)&c2 - (int)&c1); // prints 4
}
void main(){
check_alignment(1.0,1.1);
}
Run Code Online (Sandbox Code Playgroud)