虽然我认为我现在已经有了(现在灯泡非常明亮但仍然闪烁一点),我想阅读更多有关指针,变量,引用,内存地址等的内容.只是整个事情,即在听到术语"引用"时我必须要理解的东西(认为它只是一个指针,不确定).
所以,让我们知道您的来源!伟大的文章,书籍,PDF,视频,等等.任何事情都表示赞赏.
谢谢!
[更新]无论我使用lf,结果仍然是相同的Lf,llf...我正在使用代码块来编译和运行我的C程序.我正在使用GNU GCC编译器.
我尝试在不同的计算机上打印长双浮动类型,包括两个Windows和一个Mac,但事实证明它们都没有像我预期的那样工作.代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
double d = 6.232345235; //8 bytes
long double ld = 5.5767458458;
printf("%lf\n", ld);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
返回值是-0.000000或另一个非常大的负数,我现在不记得了.
任何帮助是极大的赞赏!:d
我正在阅读Brian W. Kernighan和Dennis M. Ritchie的" C编程语言 ".在第1.2章"变量和算术表达式"中,他们演示了一个简单的华氏温度到摄氏温度转换器程序.当我编译程序(Terminal.app,macOS Sierra)时,我收到此警告:
$ cc FtoC.c -o FtoC.o
FtoC.c:5:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main()
^
1 warning generated.
Run Code Online (Sandbox Code Playgroud)
这是C程序:
FtoC.c:
1 #include <stdio.h>
2
3 /* print Fahrenheit-Celsius table
4 for fahr = 0, 20, ..., 300 */
5 main()
6 {
7 int fahr, celsius;
8 int lower, upper, step;
9
10 lower = 0; /* lower limit of temperature scale */
11 upper = 300; /* upper limit */ …Run Code Online (Sandbox Code Playgroud) 我真的很困惑在字符串上使用指针.感觉他们遵守不同的规则.请考虑以下代码
char *ptr = "apple";// perfectly valid here not when declaring afterwards like next
ptr = "apple"; // shouldn't it be *ptr = "apple"
Run Code Online (Sandbox Code Playgroud)也printf()表现不同-
printf("%s", ptr) // Why should I send the address instead of the value
Run Code Online (Sandbox Code Playgroud)我还在一本书中看到了以下代码
char str[]="Quest";
char *p="Quest";
str++; // error, constant pointer can't change
*str='Z'; // works, because pointer is not constant
p++; // works, because pointer is not constant
*p = 'M'; // error, because string is constant
Run Code Online (Sandbox Code Playgroud)我无法理解应该暗示什么
请帮忙,我在其他地方找不到任何信息
情况:
我正在学习速成课程,以熟悉C,并且我注意到本课程的作者可以打印超出数组索引的数组值,并确信该值将是0每次的。
下面的速成课程中的代码:
int arrayVar[] = {45, 67, 34, 23};
printf("This array index value is %d", arrayVar[4]);
Run Code Online (Sandbox Code Playgroud)
代码输出:
Run Code Online (Sandbox Code Playgroud)This array index value is 0
根据我的经验,在C的修补/测试过程中,一旦超出数组的最大索引,您将进入未定义的行为范围,任何事情都可能发生,因此他如何对看到一个数组如此自信(正确)?0每次有价值吗?
如果我打印的值超出了数组的最大索引,我会看到“随机”值(或内存中剩余的值,对吗?)。
为什么我的经验与本课程中看到的不同?这只是C标准的不同吗?还是这表明编译器有所不同?或两者?
环境信息:我正在使用C11标准,并且正在使用ubuntu(位于)默认安装的编译器(我很确定)/usr/bin/cc。
编辑:对于任何有兴趣了解我所见内容的人,这是课程的链接(您可能会被提示登录Udemy):https ://www.udemy.com/c-fast-crash-course- 简介/学习/讲座/ 12868540#questions

我正在阅读一本关于 c++ 的书(Ulla Kirch-Prinz 和 Peter Prinz 编写的 C++ 编程完整指南;ISBN:0-7637-1817-3),它提到 isupper()、islower()、isalpha( )、isdigit()、isalnum()、isspace() 和 isprint() 是用于字符分类的宏。
我觉得这种奇怪有两个原因:
在同一本书中,它讨论了如何,即使宏可以有参数,它们本质上仍然只是用定义填充的占位符名称。这看起来很奇怪,因为我不知道有条件地操作什么样的替换文本。这听起来更符合函数或内置操作(如sizeof)。
这似乎也很奇怪,因为我听说有些人称这些函数,而我也听到有些人称它们为宏。
任何解释将不胜感激。我对此比较陌生,所以我仍在努力弄清楚这一切。谢谢你。
注意:这是一个自我问答,并且针对“Let us C”一书宣传的错误信息进行了更直观的提问。另外,请让我们不要讨论C++,这个问题是关于 C 的。
我正在阅读 Yashwant Kanetkar 的书“Let us C”。
书中有如下例子:
#include <stdio.h>
int main(void) {
int a = 1;
printf("%d %d %d", a, ++a, a++);
}
Run Code Online (Sandbox Code Playgroud)
作者声称这段代码应该输出3 3 1:
令人惊讶的是,它输出
3 3 1. 这是因为 C 的调用约定是从右到左。也就是说,首先1通过表达式a++,然后a增加到2。然后结果++a就通过了。即 a 增加到 3 然后通过。最后,传递 a 的最新值,即 3。因此按从右到左的顺序1, 3, 3通过。一旦printf( ) 收集它们,它就会按照我们要求它打印它们的顺序(而不是传递它们的顺序)打印它们。这样3 3 1就打印出来了。
但是,当我编译代码并使用 运行它时clang,结果是1 2 2 …
c undefined-behavior sequence-points language-lawyer order-of-execution
我正在读一本关于 C 的介绍书,我看到了以下段落:
但以下代码编译后会产生预期的输出:
#include <stdio.h>
int main()
{
for(int i = 0; i<=10; i++)
{
int val = i + 1;
int x = val * val;
printf("%d\n", x);
int y = x;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我使用https://www.onlinegdb.com/,在上面的代码中,我在第一个可执行语句之后声明了许多变量。对我来说,这与书中的部分内容不符。
我是否误解了这本书所讲的内容?
您好我正在尝试使此代码正常工作
extern "C"
{
#include <lua.h>
#include "lualib.h"
#include "lauxlib.h"
}
#include "glew.h"
#define GLEW_STATIC
#include "SDL/SDL.h"
#include "SDL/SDL_image.h"
#include <stdlib.h>
#include <iostream>
#include <fstream>
////////////////////////
////////////////////////
test.h
void Test(void)
{
int status;
**//The Lua Interpreter**
lua_State *L = lua_open();
**//Open Lua Libarys**
luaL_openlibs(L);
**//Run Lua Script**
status = luaL_loadfile(L,"Test.lua");
printf( "actually getting to this point!");
getchar();
//Close Lua
lua_close(L);
}
Run Code Online (Sandbox Code Playgroud)
这个名字叫test.lua这是我的lua文件
print"Whats your name?"
function sleep(n)
end
Run Code Online (Sandbox Code Playgroud)
这不起作用:(
lual_dofile(L, "Test.lua");
孔程序编译,但然后不执行脚本或显示运行的lua脚本的任何视觉反馈有没有人遇到此问题之前?并且知道为什么?**
#include <stdio.h>
int main()
{
int x = -2;
while (x++ || x==0)
{
printf("X");
}
}
Run Code Online (Sandbox Code Playgroud)
输出如下
XX
为什么?
我期望这段代码进入无限循环,因为增量将使逻辑或的任一侧都为真。