小编hac*_*cks的帖子

C中的结构和功能范围有什么区别?

考虑一下这段代码

   int main(void)
   {
       typedef struct {
           int i;
       } s;

       struct {
           s s;
       } t;

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

它汇编很好.现在来看看这一个

   int main(void)
   {
       typedef struct {
           int i;
       } s;

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

这段代码不会编译 -

‘s’ redeclared as different kind of symbol.
Run Code Online (Sandbox Code Playgroud)

问题:为什么拥有"ss"是正确的; 作为结构内部的声明,但在函数内部有这个定义是不正确的?

c struct

5
推荐指数
1
解决办法
1638
查看次数

变量的C内存管理

我是C的新手,目前我遇到了一些麻烦.请看下面的代码:

int main (int argc, char *argv[]) {
    int j = 2;
    int i = 100;    
    int *pi = &i;

    pi = &j;    //those 2 lines should do nothing, in my opinion
    pi = &i;    //

    pi[1] = -4;
    printf("i = %d, j = %d, *pi = %d\n", i, j, *pi);
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

代码因SegFault失败.用gdb进行一些调查:

(gdb) print &j
$1 = (int *) 0x7fffffffde80
(gdb) print &i
$2 = (int *) 0x7fffffffde84
Run Code Online (Sandbox Code Playgroud)

但是,没有2行,代码工作正常,因为我和j似乎交换内存中的位置 - 但为什么??

(gdb) print &j
$1 = (int …
Run Code Online (Sandbox Code Playgroud)

c pointers

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

假设我们有结构填充,int的大小为4,double的大小为8字节,下面这段代码中结构的大小是多少

任何人都可以告诉我,下面显示的结构的大小是24而不是20.

typedef struct
{
    double d;  // this would be 8 bytes
    char c;   // This should be 4 bytes considering 3 bytes padding
    int a;   // This would be 4 bytes
    float b; // This would be 4 bytes
} abc_t;

main()
{
    abc_t temp;
    printf("The size of struct is %d\n",sizeof(temp));
}
Run Code Online (Sandbox Code Playgroud)

我的假设是当我们考虑填充时结构的大小将是20但是当我运行此代码时,大小打印为24.

c structure padding

5
推荐指数
1
解决办法
73
查看次数

MOV DD是什么意思?

在汇编语言,指令

MOV A B
Run Code Online (Sandbox Code Playgroud)

表示将B(来源)的内容移动到A(目的地).
我突然想出了指示

MOV D D
Run Code Online (Sandbox Code Playgroud)

这意味着什么?

我在实验手册中看到了这一点.截图:

在此输入图像描述

assembly microprocessors 8085

4
推荐指数
2
解决办法
6531
查看次数

c中的字符数组消隐

int main()
{
     int n,m,i,j;char a[10][10];
     printf("enter n and m values\n");     
     scanf("%d%d",&n,&m);

     printf("enter array values");    
     for(i=0;i<n;i++)
        for(j=0;j<m;j++)
          scanf("%c",&a[i][j]);

     printf("the array is \n");
     for(i=0;i<n;i++)
        for(j=0;j<m;j++)
          printf("%d %d %c\t",i,j,a[i][j]);
}
Run Code Online (Sandbox Code Playgroud)

输入

 Enter n and m values  
 4 5
 Enter characters 
 11111000001111100000
Run Code Online (Sandbox Code Playgroud)

产量

0 0 

0 1 1   0 2 1   0 3 1   0 4 1   1 0 1   1 1 0   1 2 0   1 3 0   1 4 0   2 0 0    
2 1 1   2 2 1   2 …
Run Code Online (Sandbox Code Playgroud)

c string whitespace scanf

4
推荐指数
1
解决办法
98
查看次数

当c指针独立时,很难理解它们

我正在研究c的指针,这个位置*确实让我很困惑.

我明白什么int *a是......

但是是什么

a = malloc(n * sizeof(int) ) 
Run Code Online (Sandbox Code Playgroud)

我明白上面做了什么,但为什么它*本身就在中间?这部分真让我困惑,所以请有人向我解释一下吗?

c pointers

4
推荐指数
1
解决办法
78
查看次数

为了打印"a"的值,内部(a + = 3,5,a)的操作数将如何处理或计算?

代码段是:

int main()
{
     int a = 1, b = 2, c = 3;
     printf("%d", a += (a += 3, 5, a));
}
Run Code Online (Sandbox Code Playgroud)

虽然它在终端中显示8作为输出.但我没有得到它背后的概念.

c undefined-behavior

4
推荐指数
2
解决办法
1265
查看次数

在初始化期间为指针指定字符串值时究竟会发生什么?

我很困惑,因为从我学到的东西,指针存储了他们指向的数据的地址.但在某些代码中,我看到在初始化期间经常分配给指针的字符串.

字符串究竟发生了什么?
指针是否自动指定一个地址来存储字符串并将其自身指向该地址?
"解除引用"如何在指向字符串的指针中起作用?

c memory string pointers

4
推荐指数
1
解决办法
81
查看次数

如何在C中打印2D数组,而不使用运算符[]?

我正在尝试使用打印2D矩阵[],而不是*像指针一样使用.
因此,对于1 D阵列,我会这样做:*(arr+i)例如.用于替换的语法是matrix[][]什么?

这是代码:

for (i = 0; i < size; i++)
{
    for (j = 0; j < (size * 2); j++)
    {
        printf(" %5d", matrix[i][j]);
    }
    printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

PS,我确实尝试了几件事:

*(matrix+i+j);
*(matrix+i)+*(matrix+j);
Run Code Online (Sandbox Code Playgroud)

当然没有一个有效.

谢谢你的帮助和时间!

c arrays pointers syntax-error

4
推荐指数
2
解决办法
812
查看次数

如何在线性时间内对二进制数组进行排序?

http://www.techiedelight.com/sort-binary-array-线性-time/

线性时间意味着我们只需遍历数组一次,但根据这里的解决方案,我们将首先遍历数组以找到零的数量,然后再次遍历它以用零填充数组的第一部分和其余部分用 1 表示。

那么,线性时间解是怎样的呢?我错过了什么?

arrays sorting algorithm binary time-complexity

4
推荐指数
1
解决办法
3904
查看次数