小编pro*_*873的帖子

为什么这个指针声明可以与 malloc() 一起使用?

我是 C 新手,对特定指针声明有疑问:

这是我写的一个程序:

#include <stdlib.h>

struct n {

       int x;
       int y;
};


int main()
{
    struct n **p = malloc(sizeof(struct n));

    return 0;
}

Run Code Online (Sandbox Code Playgroud)

这里的声明不正确,但为什么不正确呢?

这是我的思考过程:

  • 的手册页malloc指定它返回一个指针:
The malloc() and calloc() functions return a pointer to the
allocated memory, which is suitably aligned for any built-in
type.
Run Code Online (Sandbox Code Playgroud)
  • 的类型pstruct n**称为指向另一个指针的指针。

  • 但这个声明在理论上不应该起作用,因为:

  1. malloc返回类型struct n*(指针)
  2. 并指向返回p的指针malloc
  3. 所以它本质上是一个指向另一个指针的指针
  4. 所以 的类型p已满足

抱歉,如果这是一个愚蠢的问题,但我真的很困惑为什么这不起作用。感谢您提前提供的任何帮助。

c malloc struct pointers

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

为什么 C 对 stdin/stdout 流以及文件操作使用 FILE?

我最近研究了 C 中的文件和输入/输出,很快发现 C 使用一种typedefed 结构FILE,通常表示为指向结构的指针。
该结构包含有关输入和输出的数据,因此操作系统和内核的较低级别部分可以轻松管理系统上的输入和输出,例如输入数据的大小、数据类型等。基本上,它是有目的地抽象
的因为它的工作方式非常低级。

我还知道FILE* xC 程序员通常使用类似的东西来表示输入和输出流。C 还允许FILE常用来指向文件。

为什么C允许程序员使用CFILE来表示文件以及输入/输出流?对我来说,这听起来非常令人困惑,而且这个关键字的字面意思FILE是这样FILE的,我认为它经常会让新程序员感到困惑,认为它仅用于指向文件。

那么为什么FILE同时用于文件和输入/输出呢?

c file-io file

0
推荐指数
1
解决办法
337
查看次数

这个汇编函数如何返回值?

我用 C 语言编写了一个非常简单的函数,它使用strlen()from<string.h>返回变量的长度char*

int length(char *str) {

    return strlen(str);
}
Run Code Online (Sandbox Code Playgroud)

以下是相应的 x86_64 程序集objdump -M intel -d a.out

00000000000011a8 <length>:
    11a8:   f3 0f 1e fa             endbr64 
    11ac:   55                      push   rbp
    11ad:   48 89 e5                mov    rbp,rsp
    11b0:   48 83 ec 10             sub    rsp,0x10
    11b4:   48 89 7d f8             mov    QWORD PTR [rbp-0x8],rdi
    11b8:   48 8b 45 f8             mov    rax,QWORD PTR [rbp-0x8]
    11bc:   48 89 c7                mov    rdi,rax
    11bf:   e8 ac fe ff ff …
Run Code Online (Sandbox Code Playgroud)

c assembly x86-64 calling-convention

0
推荐指数
1
解决办法
959
查看次数

如果在 C 中不检查 feof 会发生什么?

在读/写操作期间是否绝对有必要检查feof()

我问的原因是因为我有一个执行读/写一次的程序,下面是代码:

while (1) {

      data = read_file_data(file);
      write_file_data(data, filename);

      if (feof(file)) 
          print(read error)
}
Run Code Online (Sandbox Code Playgroud)

这只是伪代码,但是是否有必要检查feof()像这样一次读取的情况?目前,我认为只有当您在上面的阅读之后再阅读一遍时才有必要,如下所示:

while (1) {

      data = read_file_data(file);
      write_file_data(data, filename);

      if (feof(file))       // feof error occurred oops
          print(read error)

      data = read_file_data(file); // reading after error    
}
Run Code Online (Sandbox Code Playgroud)

EOF reached最后,即使发生错误(读过去) ,阅读会产生什么后果EOF

c file-io pointers file feof

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

标签 统计

c ×4

file ×2

file-io ×2

pointers ×2

assembly ×1

calling-convention ×1

feof ×1

malloc ×1

struct ×1

x86-64 ×1