相关疑难解决方法(0)

网上变量,指针,引用和内存地址的最佳解释在哪里?

虽然我认为我现在已经有了(现在灯泡非常明亮但仍然闪烁一点),我想阅读更多有关指针,变量,引用,内存地址等的内容.只是整个事情,即在听到术语"引用"时我必须要理解的东西(认为它只是一个指针,不确定).

所以,让我们知道您的来源!伟大的文章,书籍,PDF,视频,等等.任何事情都表示赞赏.

谢谢!

c c++ pointers objective-c

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

如何在C中printf long double?

[更新]无论我使用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

c double

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

如何不调用警告:缺少类型说明符?

我正在阅读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)

c kernighan-and-ritchie compiler-warnings

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

在字符串上使用指针

我真的很困惑在字符串上使用指针.感觉他们遵守不同的规则.请考虑以下代码

  1. 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)
  2. printf()表现不同-

    printf("%s", ptr) // Why should I send  the address instead of the value
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我还在一本书中看到了以下代码

    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 c-strings char-pointer

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

超出数组最大索引的未定义行为

情况

我正在学习速成课程,以熟悉C,并且我注意到本课程的作者可以打印超出数组索引的数组值,并确信该值将是0每次的。

下面的速成课程中的代码:

int arrayVar[] = {45, 67, 34, 23};
printf("This array index value is %d", arrayVar[4]);
Run Code Online (Sandbox Code Playgroud)

代码输出:

This array index value is 0
Run Code Online (Sandbox Code Playgroud)

根据我的经验,在C的修补/测试过程中,一旦超出数组的最大索引,您将进入未定义的行为范围任何事情都可能发生,因此他如何对看到一个数组如此自信(正确)?0每次有价值吗?

如果我打印的值超出了数组的最大索引,我会看到“随机”值(或内存中剩余的值,对吗?)。

为什么我的经验与本课程中看到的不同?这只是C标准的不同吗?还是这表明编译器有所不同?或两者?

环境信息:我正在使用C11标准,并且正在使用ubuntu(位于)默认安装的编译器(我很确定)/usr/bin/cc

编辑:对于任何有兴趣了解我所见内容的人,这是课程的链接(您可能会被提示登录Udemy):https ://www.udemy.com/c-fast-crash-course- 简介/学习/讲座/ 12868540#questions

样本图片

c arrays undefined-behavior

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

isupper() 是宏还是函数?

我正在阅读一本关于 c++ 的书(Ulla Kirch-Prinz 和 Peter Prinz 编写的 C++ 编程完整指南;ISBN:0-7637-1817-3),它提到 isupper()、islower()、isalpha( )、isdigit()、isalnum()、isspace() 和 isprint() 是用于字符分类的宏

我觉得这种奇怪有两个原因:

  1. 在同一本书中,它讨论了如何,即使宏可以有参数,它们本质上仍然只是用定义填充的占位符名称。这看起来很奇怪,因为我不知道有条件地操作什么样的替换文本。这听起来更符合函数或内置操作(如sizeof)。

  2. 这似乎也很奇怪,因为我听说有些人称这些函数,而我也听到有些人称它们为宏。

任何解释将不胜感激。我对此比较陌生,所以我仍在努力弄清楚这一切。谢谢你。

c++ macros function c-preprocessor

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

为什么此代码打印 1 2 2 而不是预期的 3 3 1?

注意:这是一个自我问答,并且针对“Let us 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

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

新手关于C变量声明的问题

我正在读一本关于 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/,在上面的代码中,我在第一个可执行语句之后声明了许多变量。对我来说,这与书中的部分内容不符。

我是否误解了这本书所讲的内容?

c

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

lual_dofile(); 不会用C++和Lua加载脚本

您好我正在尝试使此代码正常工作

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脚本的任何视觉反馈有没有人遇到此问题之前?并且知道为什么?**

c++ lua file

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

这里逻辑运算符如何短路?

#include <stdio.h>

int main()
{
   int x = -2;
   while (x++ || x==0)
   {
      printf("X");
   }
}
Run Code Online (Sandbox Code Playgroud)

输出如下

XX

为什么?

我期望这段代码进入无限循环,因为增量将使逻辑或的任一侧都为真。

c logical-operators

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