小编Gri*_*han的帖子

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
查看次数

C编程与输出混淆

谁能请解释以下程序的输出?如果使用的话我会得到一个无限循环a[i] = 0;,当我使用时会得到一个段错误a[i] = i;,也会在使用时得到i范围,而在给出段错之前0 - 9使用a[i] = 0;它会达到39 a[i] = i;.

#include<stdio.h>
#include<stdlib.h>
int mult(int a, int b);
int main()
{
    int a[10];
    int i = 0;
    for(i=0; i < sizeof(a); i++)
    {
        a[i] = i;
        printf("a[i]=%d i=%d\n", a[i], i);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c arrays

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

将整数常量转换为指针

我不明白这行是做什么的:

((struct Example*) 0x10000)
Run Code Online (Sandbox Code Playgroud)

我写了一个测试程序:

#include <stdio.h>

struct Elf{
    int bla;
    char bla2;
};

int main(){
    struct Elf *elfPtr;
    printf("Before casting: %p\n", elfPtr);

    elfPtr = ((struct Elf *)0x10000);
    printf("After casting: %p\n", elfPtr);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

在投射之前:0xb776dff4

投射后:0x10000

这条线只做这个吗?

elfPtr = 0x10000
Run Code Online (Sandbox Code Playgroud)

c pointers

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

C基础知识 - 变量和指针存在问题

我在学习C方面遇到了一些问题,而且我真的没有其他地方可以提出建议.我来自一系列OOP语言,例如JavaScript和主要是Python,因此C是一个重大变化,我在尝试学习基础知识方面遇到了一些障碍.我最初是从Zed Shaw的"艰难学习C"开始的,但他并没有在书中教授任何东西.是的,他让你写了很多代码并改变了一些东西,但是我不知道为什么代码会工作,而这只会导致更复杂的例子.

我遇到的主要问题是变量和指针之间的区别(我认为它是非常独特的,直到我看到一些我将在下面发布的例子,这完全模糊了两者之间的界限).

例如,我理解声明和初始化一个int被调用的a和一个指针,p看起来像这样:

int a;
int *p;

a = 12;
p = &a;
Run Code Online (Sandbox Code Playgroud)

令我困惑的是当你声明看起来像指针的变量,但根本不是指针(或者它们是什么?).例如:

char *string = "This is a string";
printf("%s\n", string);
Run Code Online (Sandbox Code Playgroud)

什么string时候定义和初始化?它是指针吗?如果是的话,为什么不在printf函数中打印它时取消引用它?有很多像这样的例子让我很困惑.

我遇到的另一个例子没有任何意义:

int i;
scanf("%d", &i);
Run Code Online (Sandbox Code Playgroud)

i当&符号应该引用变量的内存中的位置而不是值时,这个函数如何更新整数的值?阵列和结构变得更加复杂,这是我停下来的地方,我决定要找一些建议.


老实说,我觉得很尴尬发布这样一个菜鸟问题,但每个人都从某个地方开始.这些基础知识是我知道在继续之前需要能够理解的东西,但是当我看到与我刚刚学到的内容相矛盾的代码示例时,我很难理解它.我知道这是一个非常普遍的问题,但我希望你们中的一些人能够解释这些基础知识,或者指出我可以更好地学习/理解这一点的方向.我遇到的大多数视频教程都过于笼统,与在线文本教程相同,他们告诉你如何做某事,但不解释它,这会导致一些严重的问题.

c pointers

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

Mysql - 如何获取同一表的两个外键列的数据

我的数据库中有两个表

  1. 表:users与列:idusernameemailETCS

  2. 表:users_messages列:id, to, from, messages,sent_time

tofrom是关键usersusers表。问题是我需要:
“从用户名和消息中选择所有用户”。

例如,如果表行如下所示:

From, To,   Message
11,   14,   Hi, How are you
14,   11,   Hello,
Run Code Online (Sandbox Code Playgroud)

如果 11 是 john 而 14 是 mark,那么我需要这样的输出:

From,   To,     Message
john,   mark,   Hi, How are you
mark,   john,   Hello,
Run Code Online (Sandbox Code Playgroud)

通过我的查询,我只能从列或到列获取用户名,但不能同时获取两者的用户名。我怎样才能执行一个查询,让我从和到两个用户名?

以下查询给了我空结果:

SELECT  u.username, m.message, m.from, m.to  
FROM  `users_messages` m,  `users` u
where 
m.from = …
Run Code Online (Sandbox Code Playgroud)

php mysql sql

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

值和变量的地址

有一个问题要打印值的地址:

char word[] = "hi there"; //print address of string
int a = 1; // print address of 1
Run Code Online (Sandbox Code Playgroud)

我知道如何打印变量的地址,我认为值在变量地址内?那么值的地址实际上是变量地址?

这是一个棘手的问题,我是对的吗?

提前致谢

c pointers

2
推荐指数
1
解决办法
142
查看次数