小编dar*_*rix的帖子

c中的数组名称究竟是什么?

我很难理解C中数组名称的类型和用法.这可能看起来很长,但请耐心等待.

我理解以下语句声明a是类型,int []整数数组.

int a[30];
Run Code Online (Sandbox Code Playgroud)

同时a也指出数组的第一个元素和类似*(a+2)的东西是有效的.因此,a看起来像一个指向整数指针.但实际上类型int []int*不同; 前者是数组类型,后来是指向整数指针.

类型int []变量int*在传递给函数时也会转换为类型变量; 因为C数组是通过引用传递的(sizeof运算符除外).

这就是让我垂涎的观点.看看下面这段代码:

int main()
{
    int (*p)[3];
    int a[3] = { 5, 4, 6 };

    p = &a;

    printf("a:%d\t&a:%d\n",a,&a);
    printf("%d",*(*p + 2));
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

a:2686720       &a:2686720
6
Run Code Online (Sandbox Code Playgroud)

那么,上面的代码是如何工作的呢?我有两个问题:

  1. a&a具有相同的值.为什么?
  2. 到底是int (*p)[3];做什么的?它声明了一个 …

c arrays pointers memory-address

28
推荐指数
2
解决办法
5750
查看次数

为什么建议在打印前将指针强制转换为通用指针?

好的,我听说你应该把一个指针指向一个普通的指针,即void *在打印它之前,必须练习使用%p占位符而不是%dprintf打印它们的函数中.

我只是觉得可以在打印时防止截断大地址,或者是其他什么?但关键是如果你在一台64位指针和32位整数的机器上; 使用%p而不是%d将完成这项工作.

有人知道这种铸造技术有用的任何实际情况吗?

c printf pointers

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

python对象的布尔上下文

我可以在所需的布尔上下文中使用python对象吗?默认情况下,任何对象都True在布尔上下文中.

>>> class Person():
...           pass
... 
>>> a=Person()
>>> bool(a)
True
Run Code Online (Sandbox Code Playgroud)

bool(0)返回Falsebool(1)返回一样True.我可以用任何方式定义一个对象,使其具有布尔值True或者False.如果我在任何地方都错了,请纠正我,谢谢.

python oop python-2.7 python-3.x

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

为什么在C中允许以下内容?

为什么大多数C的实现都允许以下行为?如果我们使用变量本身来定义它,就像这样:

#include <stdio.h>

int main()
{
    int a = 9;
    int b = ( a +b );
    printf("%d",b);
}
Run Code Online (Sandbox Code Playgroud)

我知道将使用垃圾值,b但应该有一些编译时警告.这对我来说听起来有点奇怪.在像Python这样的语言中,执行这样的操作是违法的:

>>> b = 9
>>> a = a + b

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    a = a + b
NameError: name 'a' is not defined
Run Code Online (Sandbox Code Playgroud)

我想Python不会将变量放到当前的命名空间,直到它定义良好(即它在当前范围内有一个值),而在C中,上面的语句断开如下:

int b = 9;
int a; // put to namespace or whatever a lookup table with garbage value
a = a …
Run Code Online (Sandbox Code Playgroud)

c python

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

Dockerfile VOLUME无法正常工作

我真的不习惯使用docker VOLUME了.我有一个普通的dockerfile:

FROM ubuntu:latest  
VOLUME /foo/bar
RUN touch /foo/bar/tmp.txt
Run Code Online (Sandbox Code Playgroud)

我跑了$ docker build -f dockerfile -t test .,它成功了.在此之后,我以交互方式将shell运行到与创建的test映像的运行相关联的docker容器中.就是这样,我跑了$ docker run -it test

观察:

/foo/bar已创建但为.

docker inspect test 安装信息:

"Volumes": {
  "/foo/bar": {}
}
Run Code Online (Sandbox Code Playgroud)

它似乎根本没有安装.这项任务看起来很顺利,但我做错了吗?

编辑:我希望持久保存在此已装入的卷目录中创建的数据.

docker dockerfile docker-volume

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

java中未报告的异常处理

我是Java初学者,并且知道try...catch语句用于处理异常; 表示当try块抛出异常时,catch执行块.所以,我的问题是,当我尝试下面的代码(没有try catch)它抛出一个未报告IOExceptionread()方法,但当我使用 try catch 它工作正常.

try块中出现上述异常并exception occured打印时,为什么控件不会转移到catch语句?这是我的代码:

class Test00 {
    public static void main(String args[]) {
        char ch;

        try {
            ch=(char)System.in.read();//here exception is thrown without using try..catch
            System.out.println(ch);
        } catch(Exception e) {
            System.out.print("exception occured");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为编译器会抛出一个异常,这就是代码与try catch一起工作的原因.但是为什么不执行catch块呢?我得错了.

java exception-handling exception

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

为什么我无法在代码中更改虚拟变量?

好的,这是一个简单的程序代码我试图编写实现功能的atoi功能.困扰我的是我无法更改块中的dummy变量,if而我可以更改n变量.n并且dummy在同一范围内定义.

int main()
{

    char *s;

    puts("Enter a string");
    fgets(s,100,stdin);
    int n = 0 , dummy = 1; // both are defined in the same scope 

    for(int i = 0 ; i < 2 ; i++ )
    {
        if(isdigit( s[i] ))    { n = n*10 + (s[i] - '0'); }

        if(1)
        {
            dummy = dummy + 99; // This is the thing not working , program stops executing …
Run Code Online (Sandbox Code Playgroud)

c

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

为什么我不能在括号中包装初始化列表?

我通常会声明并初始化一个整数数组,如下所示:

int a[3] = { 1, 2, 3}; // declares an array of 3 integers
Run Code Online (Sandbox Code Playgroud)

但今天我发现将列表括在括号中,如下所示:

int a[3] = ( { 1, 2, 3} ); // gives compile time error
Run Code Online (Sandbox Code Playgroud)

这产生了以下编译器错误:

expected ';' before '}' token
invalid initializer
Run Code Online (Sandbox Code Playgroud)

当然,人们通常没有理由将列表括在括号中,但现在我很好奇 - 为什么我们不能在这里使用括号?

c arrays

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