在以下代码中:
int strlen(char *s){
char *p = s;
while(*p++ != '\0');
return p - s;
}
Run Code Online (Sandbox Code Playgroud)
为什么上述评估与此不同:
int strlen(char *s){
char *p = s;
while(*p != '\0') p++;
return p - s;
}
Run Code Online (Sandbox Code Playgroud)
我的理解是表达式将首先进行评估,然后进行增量.
main()
{
char a[] = "Visual C++";
char *b = "Visual C++";
printf("\n %d %d",sizeof(a),sizeof(b));
printf("\n %d %d",sizeof(*a),sizeof(*b));
}
Run Code Online (Sandbox Code Playgroud)
sizeof(a)给我输出:( 11 即字符串的长度)
为什么会这样?
为什么不输出sizeof(a)= 4因为当我尝试打印a它时给我一个地址值,因此是一个整数?
这些是用于2D阵列的符号
char (*names)[5] ;
Run Code Online (Sandbox Code Playgroud)
和
char* names[] = {"Jan","Feb"};
Run Code Online (Sandbox Code Playgroud)
和
char names[3][5] = { Initializers..};
Run Code Online (Sandbox Code Playgroud)
我对这些符号感到非常困惑.
第一个声明名称是指向5个字符数组的指针,即
names -> a char pointer -> "Some string"
Run Code Online (Sandbox Code Playgroud)
第三个存储器映射具有不同的存储器映射,即它与行正常数组一样以行主要顺序存储,与上述不同.
第二种符号与第一种和第三种符号的相似或不同如何?
将它们传递给函数也是完全不同的故事.如果我们将2d数组声明为类型2,那么它将作为双指针(char** names)传递,而如果它是类型1或类型3,则应在声明中提及列.
请帮助我更清楚地了解这些问题.谢谢.
在C中计算后缀表达式时,如果我们的令牌是一个运算符,我们必须将它放在堆栈中,使其具有最高优先级.
我的问题是运营商之间*, /, %,具有最高优先级.
我们还需要考虑关联性吗?由于所有这些运营商都具有LEFT-TO-RIGHT 关联性,因此会/优先于*?
直到值i大于0,main()才会递归调用.一旦它成为0if条件被违反.任何人都告诉我如何执行print语句.当我运行它时,我得到了输出0000.谢谢
void main()
{
static int i=5;
if(--i)
{
main();
printf("%d",i);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在处理该代码,我试图使用x + 1而不是++x结果是无限循环并且在屏幕上打印了零.
这是代码:
#include <stdio.h>
int main(void){
int x;
for(x = 0; x <= 100; x + 1) //instead of ++x
printf("%d\t",x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想知道这个动作.....为什么编译器没有产生这样的错误,,,,实际发生了什么?!! 并被x++视为x += 1?!
在我的下面的代码中,如果我声明old_act为全局变量,那么该程序工作正常.如果在main中声明:
有人可以帮我理解发生的事情.
void sighandler(int signum)
{
printf("Caught signal:%d pressed ctrl+c!!\n",signum);
}
int main()
{
struct sigaction act_h;
struct sigaction old_act;
act_h.sa_handler = sighandler;
// act_h.sa_flags = SA_RESTART;
sigaction(SIGINT,&act_h,&old_act);
printf("This is an infinite loop\n");
int remain=sleep(10);
printf("remaining time in sec : %d\n",remain);
printf("Before second sleep\n");
sleep(10);
printf("This is an infinite loop\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
从gdb看起来有些函数调用发生在非法位置,但不确定:
This GDB was configured as "i686-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/diwakar/Documents/my_C_codes/L2IT/SigHandling/a.out...done.
[New LWP 5661]
warning: Can't …Run Code Online (Sandbox Code Playgroud) 我想知道的是这个陈述是否可行
for(j = 2; (j <= i) && flag; j++)
Run Code Online (Sandbox Code Playgroud)
flagi在此循环之前初始化为.我以前没见过这样的事.
考虑以下测试程序
#include<stdio.h>
#include<stdlib.h>
#include <math.h>
int main()
{
double t = nan(NULL);
printf("%g\n",t);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译
/usr/local/bin/gcc -lm -o test test.c
Run Code Online (Sandbox Code Playgroud)
输出是预期的NaN.但是,如果我输入错误或犯了错误而遗漏了
#include <math.h>
Run Code Online (Sandbox Code Playgroud)
它编译好,没有错误,没有警告,但输出为0
如果我用-Wall它编译确实给出警告警告:隐式声明函数`nan'虽然这种行为似乎不仅仅是一个警告.是否有任何意义不停止编译?并且有没有人有任何建议如何阻止这导致相当大的文件的主要问题?
C中的字符串常量存储为字符数组,而按元素创建这样的数组元素时,是否需要提供空字符.
我需要存储一个字符串常量,比如说S[number]= "hello\n".字符串常量在C中存储为字符数组,此外,这样的字符串由空字符终止'\0'.在将短语存储在数组中时,是否需要考虑空字符并分配额外的空间,或者我只需要提及需要存储的字符数?