考虑一下这段代码
int main(void)
{
typedef struct {
int i;
} s;
struct {
s s;
} t;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它汇编很好.现在来看看这一个
int main(void)
{
typedef struct {
int i;
} s;
s s;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这段代码不会编译 -
‘s’ redeclared as different kind of symbol.
Run Code Online (Sandbox Code Playgroud)
问题:为什么拥有"ss"是正确的; 作为结构内部的声明,但在函数内部有这个定义是不正确的?
我是C的新手,目前我遇到了一些麻烦.请看下面的代码:
int main (int argc, char *argv[]) {
int j = 2;
int i = 100;
int *pi = &i;
pi = &j; //those 2 lines should do nothing, in my opinion
pi = &i; //
pi[1] = -4;
printf("i = %d, j = %d, *pi = %d\n", i, j, *pi);
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
代码因SegFault失败.用gdb进行一些调查:
(gdb) print &j
$1 = (int *) 0x7fffffffde80
(gdb) print &i
$2 = (int *) 0x7fffffffde84
Run Code Online (Sandbox Code Playgroud)
但是,没有2行,代码工作正常,因为我和j似乎交换内存中的位置 - 但为什么??
(gdb) print &j
$1 = (int …Run Code Online (Sandbox Code Playgroud) 任何人都可以告诉我,下面显示的结构的大小是24而不是20.
typedef struct
{
double d; // this would be 8 bytes
char c; // This should be 4 bytes considering 3 bytes padding
int a; // This would be 4 bytes
float b; // This would be 4 bytes
} abc_t;
main()
{
abc_t temp;
printf("The size of struct is %d\n",sizeof(temp));
}
Run Code Online (Sandbox Code Playgroud)
我的假设是当我们考虑填充时结构的大小将是20但是当我运行此代码时,大小打印为24.
在汇编语言,指令
MOV A B
Run Code Online (Sandbox Code Playgroud)
表示将B(来源)的内容移动到A(目的地).
我突然想出了指示
MOV D D
Run Code Online (Sandbox Code Playgroud)
这意味着什么?
我在实验手册中看到了这一点.截图:
码
int main()
{
int n,m,i,j;char a[10][10];
printf("enter n and m values\n");
scanf("%d%d",&n,&m);
printf("enter array values");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%c",&a[i][j]);
printf("the array is \n");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
printf("%d %d %c\t",i,j,a[i][j]);
}
Run Code Online (Sandbox Code Playgroud)
输入
Enter n and m values
4 5
Enter characters
11111000001111100000
Run Code Online (Sandbox Code Playgroud)
产量
0 0
0 1 1 0 2 1 0 3 1 0 4 1 1 0 1 1 1 0 1 2 0 1 3 0 1 4 0 2 0 0
2 1 1 2 2 1 2 …Run Code Online (Sandbox Code Playgroud) 我正在研究c的指针,这个位置*确实让我很困惑.
我明白什么int *a是......
但是是什么
a = malloc(n * sizeof(int) )
Run Code Online (Sandbox Code Playgroud)
我明白上面做了什么,但为什么它*本身就在中间?这部分真让我困惑,所以请有人向我解释一下吗?
代码段是:
int main()
{
int a = 1, b = 2, c = 3;
printf("%d", a += (a += 3, 5, a));
}
Run Code Online (Sandbox Code Playgroud)
虽然它在终端中显示8作为输出.但我没有得到它背后的概念.
我很困惑,因为从我学到的东西,指针存储了他们指向的数据的地址.但在某些代码中,我看到在初始化期间经常分配给指针的字符串.
字符串究竟发生了什么?
指针是否自动指定一个地址来存储字符串并将其自身指向该地址?
"解除引用"如何在指向字符串的指针中起作用?
我正在尝试使用打印2D矩阵[],而不是*像指针一样使用.
因此,对于1 D阵列,我会这样做:*(arr+i)例如.用于替换的语法是matrix[][]什么?
这是代码:
for (i = 0; i < size; i++)
{
for (j = 0; j < (size * 2); j++)
{
printf(" %5d", matrix[i][j]);
}
printf("\n");
}
Run Code Online (Sandbox Code Playgroud)
PS,我确实尝试了几件事:
*(matrix+i+j);
*(matrix+i)+*(matrix+j);
Run Code Online (Sandbox Code Playgroud)
当然没有一个有效.
谢谢你的帮助和时间!
http://www.techiedelight.com/sort-binary-array-线性-time/
线性时间意味着我们只需遍历数组一次,但根据这里的解决方案,我们将首先遍历数组以找到零的数量,然后再次遍历它以用零填充数组的第一部分和其余部分用 1 表示。
那么,线性时间解是怎样的呢?我错过了什么?