小编Gri*_*han的帖子

C - 指针算术

在以下代码中:

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)

我的理解是表达式将首先进行评估,然后进行增量.

c pointers

3
推荐指数
1
解决办法
220
查看次数

C中的sizeof()函数

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它时给我一个地址值,因此是一个整数?

c arrays pointers

3
推荐指数
1
解决办法
7万
查看次数

2D阵列中的不同指针表示法?

这些是用于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 pointers multidimensional-array

3
推荐指数
1
解决办法
288
查看次数

RPN中运营商的优先级

在C中计算后缀表达式时,如果我们的令牌是一个运算符,我们必须将它放在堆栈中,使其具有最高优先级.

我的问题是运营商之间*, /, %,具有最高优先级.

我们还需要考虑关联性吗?由于所有这些运营商都具有LEFT-TO-RIGHT 关联性,因此会/优先于*

c algorithm data-structures

3
推荐指数
1
解决办法
4473
查看次数

print语句如何在这里执行四次?

直到值i大于0,main()才会递归调用.一旦它成为0if条件被违反.任何人都告诉我如何执行print语句.当我运行它时,我得到了输出0000.谢谢

void main()
{
    static int i=5;
    if(--i)
    {
        main();
        printf("%d",i);
    }
}
Run Code Online (Sandbox Code Playgroud)

c recursion static

3
推荐指数
1
解决办法
112
查看次数

为什么我不能在for循环中使用x + 1?

我正在处理该代码,我试图使用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?!

c

3
推荐指数
3
解决办法
437
查看次数

sigaction信号处理程序中的分段错误

在我的下面的代码中,如果我声明old_act为全局变量,那么该程序工作正常.如果在main中声明:

  1. 如果使用SA_RESTART,它可以正常工作
  2. 如果未使用SA_RESTART,则会导致分段错误.

有人可以帮我理解发生的事情.

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)

c linux gdb signals segmentation-fault

3
推荐指数
1
解决办法
4900
查看次数

对于循环增强但含糊不清

我想知道的是这个陈述是否可行

for(j = 2; (j <= i) && flag; j++)
Run Code Online (Sandbox Code Playgroud)

flagi在此循环之前初始化为.我以前没见过这样的事.

c for-loop

3
推荐指数
1
解决办法
95
查看次数

隐式声明是否应该返回错误

考虑以下测试程序

#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 gcc

3
推荐指数
1
解决办法
372
查看次数

在声明一个字符的数组时是否需要提供空字符?

C中的字符串常量存储为字符数组,而按元素创建这样的数组元素时,是否需要提供空字符.

我需要存储一个字符串常量,比如说S[number]= "hello\n".字符串常量在C中存储为字符数组,此外,这样的字符串由空字符终止'\0'.在将短语存储在数组中时,是否需要考虑空字符并分配额外的空间,或者我只需要提及需要存储的字符数?

c arrays string

3
推荐指数
2
解决办法
2363
查看次数