小编Sle*_*der的帖子

为什么&p和&a [0]不同?

#include <stdio.h>

int main(void) {
    int a[4][2] = { {11, 12}, {21, 22}, {31, 32}, {41, 42} };
    int *p = a[0];

    printf("%d\n", *p);

    printf("%d\n", p); 

    printf("%d\n", a[0]);

    printf("%d\n", &p);

    printf("%d\n", &a[0]);

    printf("%d\n", a); 

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

看看上面的代码.

在我的理解中,因为p等于a[0],&p并且&a[0]应该具有相同的值.

但实际输出如下:

11
1772204208
1772204208
1772204200
1772204208
1772204208
Run Code Online (Sandbox Code Playgroud)

为什么&p&a[0]不同?

什么是&p代表?

c arrays printf pointers

5
推荐指数
2
解决办法
306
查看次数

Squeak Smalltak,+, - ,*,/有更多优先权吗?

我理解在Smalltalk数值计算中,如果没有圆括号,一切都从左到右开始计算.乘法和除法的规则没有遵循加法和减法的优先顺序.

如下代码

3 + 3 * 2
Run Code Online (Sandbox Code Playgroud)

打印输出为12,而在数学中我们得到9


但是当我开始尝试功率计算时,就像

91 raisedTo: 3 + 1. 
Run Code Online (Sandbox Code Playgroud)

我认为答案应该是753572

我实际得到的是68574964

为什么?

是因为它+, -, *, /比权力更优先吗?

smalltalk numeric squeak

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

使用sed删除文件中的空行

France  211 55  Europe

Japan   144 120 Asia
Germany 96  61  Europe

England 94  56  Europe




Taiwan  55  144 Asia
North Korea 44  2134    Asia
Run Code Online (Sandbox Code Playgroud)

以上是我的数据文件。

里面有空行。

这些空行中没有空格或制表符。

我想删除数据中的所有空行。

我做了一个搜索删除空行使用 SED给出了完美的答案。

在此之前,我自己写了两段sed代码

sed -r 's/\n\n+/\n/g' cou.data
sed 's/\n\n\n*/\n/g' cou.data
Run Code Online (Sandbox Code Playgroud)

我试过 awk gsub,也没有成功。

awk '{ gsub(/\n\n*/, "\n"); print }' cou.data
Run Code Online (Sandbox Code Playgroud)

但它们不起作用,也没有任何变化。

我的 sed 代码哪里做错了?

replace sed substitution

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

作为C指针的a和+ 0之间有什么区别?

看看C代码.

#include <stdio.h>
int main(void)
{
    int v[3] = {1, 2, 3};
    printf("%d\n", v);
    printf("%d\n", v + 0);
    printf("%zu\n", sizeof(v));
    printf("%zu\n", sizeof(v + 0));
    printf("%zu\n", sizeof(v + 1));
    printf("%zu\n", sizeof(v + 2));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是其中一个输出:

-587904464
-587904464
12
8
8
8
Run Code Online (Sandbox Code Playgroud)

我认为v与v + 0相同.

两者都是指向数组v [3]中第一个元素的指针.

因此,v和v + 0具有相同的值.

但为什么他们不能保持相同的字节?(sizeof(v)和sizeof(v + 0)不同)

c arrays pointers sizeof

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

如何确认C中unsigned char的范围?

我的编译器的unsigned char包含1个字节.

所以据我所知,unsigned char的范围是0到2 ^ 8 - 1,即255.

现在我想确认无符号字符的最大整数可以显示为255.

以下是我的代码:

#include <stdio.h>
#include <limits.h>
int main(void)
{
    printf("unsigned char has %d bytes.\n", sizeof(unsigned char));

    unsigned char a;

    a = 0;

    printf("%d\n", a - 1); 
    printf("%u\n", a - 1); 
    printf("%lu\n", a - 1); 
    printf("%llu\n", a - 1);   
    printf("%zu\n", a - 1); 

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是

unsigned char has 1 bytes.
-1
4294967295
4294967295
4294967295 
4294967295
Run Code Online (Sandbox Code Playgroud)

4294967295是2 ^ 32 - 1

我哪里做错了?

c unsigned integer range char

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

Squeak Smalltalk,为什么有时减少的方法不起作用?

(2332 / 2332) reduced 
(2332 / 2) reduced 
(2332 / 322) reduced  (1166/161)
(2332 / 3) reduced  (2332/3)
(2332 / 2432423) reduced  (2332/2432423)
Run Code Online (Sandbox Code Playgroud)

看看上面的代码.打印时,第一个和第二个不起作用.弹出MessageNotUnderstood窗口.第3,第4,第5个代码没问题.结果出来了.

为什么这个reduced方法不起作用?

是因为简化方法无法处理像Uko猜测这样的整数的最终结果吗?

smalltalk squeak fractions

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

如何确认C中无符号长整数的范围?

unsigned long在我的Linux gcc上有8个字节.

unsigned long long在我的Linux gcc上也有8个字节.

所以我认为它们可以显示的整数范围是从0分钟到最大(2 ^ 64-1).

现在我想确认一下我是否正确.

这是我的代码:

#include <stdio.h>
int main(void)
{
    printf("long takes up %d bytes:\n", sizeof(long));
    printf("long long takes up %d bytes:\n", sizeof(long long));

    unsigned long a = 18446744073709551615;
    a++;
    printf("a + 1 = %lu\n", a); 

    unsigned long long b = 18446744073709551615;
    b++;
    printf("b + 1 = %llu\n", b); 

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,代码无法编译,我收到以下警告:

warning: integer constant is so large that it is unsigned
Run Code Online (Sandbox Code Playgroud)

我哪里做错了?我该如何修改代码?

c gcc integer range literals

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

在Squeak Smalltalk中,我可以做什么来显示我想要的任何基数?

我做了一个基本的算术计算,得到了答案aa

这是Squeak中的Smalltalk代码:

Transcript show: 'aa='.
Transcript show: 23124234 * 431213; cr.
Run Code Online (Sandbox Code Playgroud)

输出为aa = 9971470315842

9971470315842是十进制数.

如何根据我想要的任何整数显示基于10的数字?

比如说,基于55,基于33,基于2999.任何正整数.

hex smalltalk squeak calculator

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

是否从字符串文字初始化的数组与从单个字符初始化的数组相同?

有两个数组:

char a[] = "Nice you!";     
char b[] = {'N', 'i', 'c', 'e', ' ', 'y', 'o', 'u', '!'};
Run Code Online (Sandbox Code Playgroud)

我认为a[]并且b[]完全一样.所以这是我的代码,看看每个数组的最后一个元素后面是什么:

#include <stdio.h>

int main(void)
{
    char a[] = "Nice you!";
    char b[] = {'N', 'i', 'c', 'e', ' ', 'y', 'o', 'u', '!'};

    char *pa;
    char *pb;
    pa = a;
    pb = b;
    printf("*(pa + 9)= %d\n", *(pa + 9));
    printf("*(pb + 9)= %d\n", *(pb + 9));

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的理解是否正确?我不太确定,需要确认.

c arrays string char

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

[i]和C中的*(a + i)真的一样吗?

#include <stdio.h>
int sum2d(int row, int col, int p[row][col]);
int main(void)
{
    int a[2][3] = {{1, 2, 3}, {4, 5, 6}};

    printf("%d\n", sum2d(2, 3, a));


    return 0;
}
int sum2d(int row, int col, int p[row][col])
{
    int total = 0;
    for (int i = 0; i < row; i++)
        for (int j = 0; j < col; j++)
            total += (*(p + i))[j];
    return total;
}
Run Code Online (Sandbox Code Playgroud)

看看上面的代码.它完美地运作.

但是,在我将p [row]改为*(p + row)后,

#include <stdio.h>
int sum2d(int row, …
Run Code Online (Sandbox Code Playgroud)

c pointers arguments function

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