#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代表?
我理解在Smalltalk数值计算中,如果没有圆括号,一切都从左到右开始计算.乘法和除法的规则没有遵循加法和减法的优先顺序.
如下代码
3 + 3 * 2
Run Code Online (Sandbox Code Playgroud)
打印输出为12,而在数学中我们得到9
但是当我开始尝试功率计算时,就像
91 raisedTo: 3 + 1.
Run Code Online (Sandbox Code Playgroud)
我认为答案应该是753572
我实际得到的是68574964
为什么?
是因为它+, -, *, /比权力更优先吗?
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 代码哪里做错了?
看看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)不同)
我的编译器的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
我哪里做错了?
(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猜测这样的整数的最终结果吗?
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)
我哪里做错了?我该如何修改代码?
我做了一个基本的算术计算,得到了答案aa
这是Squeak中的Smalltalk代码:
Transcript show: 'aa='.
Transcript show: 23124234 * 431213; cr.
Run Code Online (Sandbox Code Playgroud)
输出为aa = 9971470315842
9971470315842是十进制数.
如何根据我想要的任何整数显示基于10的数字?
比如说,基于55,基于33,基于2999.任何正整数.
有两个数组:
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)
我的理解是否正确?我不太确定,需要确认.
#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)