小编Fre*_*red的帖子

C 中 &array 和 &array[0] 的区别

考虑到这个声明:

int 数组[] = ....;

我知道&array[0]将第一个元素的地址作为其值。

但是&array呢?我在我的程序中尝试了这个,它还返回了第一个元素的地址。那么有什么区别呢?

c arrays pointers

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

C 中二维数组的名称

我正在学习 C 中的指针和数组,这是一个让我困惑了一段时间的问题:

因此,一维 int 数组的名称是指向int的常量指针,它指向该数组中的第一个元素。因此,当我们评估一维数组的名称时,我们应该获取数组中第一个元素的地址。

对于二维 int 数组,数组名称是指向int的第一个数组的指针。那么 2D int 数组名称的值是什么?我认为它应该是这个二维数组中第一个数组的地址。但是C中数组的地址是如何定义的呢?它只是该数组中第一个元素的地址吗?

c arrays pointers

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

C中的棘手指针算法:**k

假设k是指向C中的整数的指针.

对于表达式**k,当我们尝试在赋值运算符("=")的右侧对此进行求值时,该值是否非法?

这是我的想法:

**k实际上是*(*k).当我们取消引用k时,我们得到一个整数的值.然后我们尝试取消引用一个整数,这是一个非法的操作.

但是我的教科书说右边的这个表达实际上是合法的.

为什么这样?

c pointers

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

使用 lseek() 系统调用重置文件位置

我尝试使用系统调用 lseek() 来返回文件的开头或到达文件的结尾。

我使用的确切代码是:

int location = lseek(fd, 0, SEEK_SET) //get back to the beginning
int location = lseek(fd, 0, SEEK_END) //reach to the end
Run Code Online (Sandbox Code Playgroud)

但是,在重置文件位置后,每当我尝试使用 read() 时,read() 的返回值总是设置为 -1,这意味着出现了问题。此外,我收到的 errno 消息是错误的文件描述符。有谁知道我应该做什么?

PS:我尝试关闭并重新打开文件以帮助我回到文件的开头,并且它有效。但我不知道如何在不使用 lseek() 的情况下到达文件末尾并以相反的顺序读取整个文件。

另外:一个可重现的例子是:

#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>

int main(void)
{
    int fd;
    char buffer[1000];

    fd = creat("newFile", 0777);

    memset(buffer, 'a', 500);
    write(fd, buffer, 500); // fill up

    int location = lseek(fd, 0, SEEK_SET); //get back to the beginning

    int read_bytes = read(fd, buffer, …
Run Code Online (Sandbox Code Playgroud)

c system-calls lseek

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

标签 统计

c ×4

pointers ×3

arrays ×2

lseek ×1

system-calls ×1