指向指针的指针,我输了

时间:2015-06-03 03:56:56

标签: c

这是我的代码,它编译并运行:

#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?

2 个答案:

答案 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");