问题标签 [kernighan-and-ritchie]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1216 浏览

kernighan-and-ritchie - K&R 练习 2-6 真正需要什么功能?

练习 2-6。编写一个函数 setbits(x,p,n,y) 返回 x,其中从位置 p 开始的 n 位设置为 y 的最右边 n 位,其他位保持不变。

我一直试图在纸上处理这个功能一两个小时,但我没有得到任何结果。

我解释该函数的方式是,任意长度的位字段 x 是从最右边的n位开始查看它的位。p将这些n位更改为位于n任意长度位字段 y 中最右侧位中的相同位。

示例:p = 7 n = 9以 x 作为顶场,y 是中间,结果是底场。

在此处输入图像描述


我无法确定如何使用任意大小的位字段来做到这一点。我应该使用sizeof(x) * 8还是没有必要?

我将不胜感激您可以提供有关如何实现此类功能的任何提示。

我还想知道这个练习的任何其他解释,可能是一个更容易的版本,尽管我确信这个可以完成。考虑到我花了多长时间,我希望能就此事发表第二意见,谢谢。

0 投票
5 回答
3419 浏览

c - K&R 练习 2-7 中的位反转功能

C 编程语言的练习 2-7 :

编写一个函数invert(x,p,n),返回从反转位置开始xnp(即,1 变为 0,反之亦然),其他保持不变。

我理解这样的问题:我有 182 是101(101)10二进制的,括号中的部分必须反转而不改变其余部分。返回值应该是10101010then,即十进制的 170。

这是我的尝试:

这似乎是正确的(对我来说),但invert(182, 4, 3)输出536870730. getbits()工作正常(直接来自书中)。我写下了我分配给的表达式中发生的事情y

应该是正确的,但事实并非如此。我发现这是出错的地方:((~xpn << (p+1)) >> n). 我不明白怎么做。

另外,我不知道这段代码有多通用。我的首要任务是让这个案子运作起来。也欢迎在这个问题上提供帮助。

0 投票
1 回答
2245 浏览

c - EOF 练习 1-6 K&R C 编程语言

这直接取自 K&R 书:

的优先级!=高于 的=,这意味着在没有括号的情况下,关系测试!=将在赋值之前完成=。所以声明

相当于

这具有将 c 设置为 0 或 1 的不良影响,具体取决于 getchar 的调用是否返回文件结尾。(在第 2 章中有更多内容。)

练习 1-6。验证表达式getchar() != EOF是 0 还是 1。

我无法理解如何做这个练习以及理解被引用的段落是怎么回事。

我知道 EOF 是 int 类型的符号常量,通常保持值 -1。由于负值 int 在进行比较时永远不能保持与 char 相同的值,因此需要将其提升为 int ,然后以某种方式发出文件结束的信号。

我也知道没有上面指定的括号,比较!=是在分配之前完成的,但这实际上是什么意思?该功能发生了什么?我还打印了 EOF 的值,它是 -1 当它说验证它是 0 还是 1 时,这个练习意味着什么?

0 投票
3 回答
1048 浏览

c - K&R C书中的atoi函数

我对 K&R C 第 2 版中的 atoi() 函数示例有一些问题。只能使用 0 到 9 的字符。但是在我的程序逻辑的某个地方我做错了。

所以里面有这个功能:

以下是我得到的错误:

0 投票
7 回答
38138 浏览

c - char * argv[] 是什么意思?

我是 C 编程新手,遇到了一个问题。
如果声明复杂,我发现了这个

这意味着daytab是数组的名称,并且数组的名称指向数组的第一个元素。数组名称与等指针操作不兼容daytab++(如果我错了,请纠正我)。

但我发现这段代码是用 Dennis Ritchie 写的

他们怎么能操纵argv?不是数组名吗?

0 投票
3 回答
77 浏览

c - 给指针赋值?

在丹尼斯里奇我发现了这个,

那么这四个表达式是等价的:

  1. r.pt1.x
  2. rp->pt1.x
  3. (r.pt1).x
  4. (rp->pt1).x

因为运算符从左到右关联。
不应该是 struct rect *rp = &r 吗?

0 投票
2 回答
246 浏览

c - 全局声明的变量是外部的还是静态的?

我在c中研究过使用关键字extern的变量是外部引用
的,例如:
Prog1.c Prog2.c 这两个程序一起成功编译。这是否意味着 Prog2.c 中的变量 a 也具有外部链接(外部引用)?
main(){
extern int a ;
a=2;
}


int a=3;

但是在 dennis ritchie pg-195 第 a4.1 节中写到,在所有块之外声明的对象,与函数定义处于同一级别,始终是静态的,我认为静态意味着内部链接,那么上述程序中到底发生了什么?

0 投票
1 回答
1250 浏览

c - 使用 K&R 样式函数定义时出错

我在编译时收到以下错误。我知道这听起来不对,但是编译器试图传达的确切消息是什么:错误:'fun' 错误的类型冲突:以前的 fun 声明在这里:

0 投票
2 回答
67 浏览

c - 分配有小数的变量怎么可能与实际小数的行为方式不同?

棘手的问题是char longest[]数组初始化。如果我把它写成 ( char longest[lim]),EOF 后返回给我的字符串比 长lim,所以我认为它不会这样工作。但是,如果我明确地将 10 放在那里 ( char longest[10]) - 它会按我的预期工作并且只返回 10 的第一个字符line

int lim = 10; char longest[lim]在这种情况下,和之间有什么区别?char longest[10]

0 投票
6 回答
6954 浏览

c - argv 指向指针数组的指针

我对以下段落如何与后面的代码匹配感到困惑:

由于 argv 是指向指针数组的指针,我们可以操作指针而不是索引数组。下一个变体基于递增 argv,它是指向 char 的指针,而 argc 是倒计时的:

char *argv[]只是一个指针数组吗?指向指针数组的指针不会写成char *(*argv[])或类似的东西吗?

作为旁注,通常我发现混合数组和指针的声明相当混乱,这是否正常?