这是我的代码,它编译并运行:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j;
int** p = (int **)malloc(2 * sizeof(int *));
p[0] = (int *)malloc(2 * sizeof(int));
p[1] = p[0];
for(i = 0; i < 2; i++)
{
for(j = 0; j < 2; j++)
{
p[i][j] = i + j;
}
}
printf("p[0][0] = %d",p[0][0]);
return 0;
}
当这个程序运行时,我得到:P [0] [0] = 1.为什么P [0] [0] = 0?
答案 0 :(得分:7)
您正在使p[0]
和p[1]
指向相同的内存位置。稍后,你运行这个循环:
for(i = 0; i < 2; i++)
for(j = 0; j < 2; j++)
p[i][j] = i + j;
将p[0][0]
设置为0
。但是,然后将p[1][0]
设置为1
。由于p[0]
和p[1]
相等,p[0][0]
最终会成为1
。
您可能打算代替
p[0] = malloc(2 * sizeof(int));
p[1] = p[0];
也是malloc
的单独p[1]
。像这样:
p[0] = malloc(2 * sizeof(int));
p[1] = malloc(2 * sizeof(int));
答案 1 :(得分:4)
P [1]和p [0]被分配到相同的存储位置。所以p [1]的任何变化都会改变p [0]。你应该为p [1]分配单独的空间。
UPDATE saleItem
SET status= "aa"
WHERE id IN (SELECT
Id
FROM saleItem
WHERE status="bb");