更改指针数组的内容

时间:2017-02-14 09:42:00

标签: c++ arrays pointers global-variables

我正在使用c ++并需要一个全局数组。所以我使用指针数组并将其全局声明,以便可以从所有其他本地函数访问它。

//GLOBAL VARIABLES
int **xArr;
int tmp=0;

myLocalFunc(){

    int c;

    for(c=0;c<5;c++){
       printf("%d ", xArr[c]);
    }

    printf("\n");

    for(c=0;c<5;c++){
        tmp++;
       *xArr[c] = tmp;
    }
}     


int main(){

    int c,i=0;

    xArr = new int*[5];

    for(c=0;c<5;c++){
      printf("X : ");
      scanf("%d",&xArr[c]);
    } 

    while(i<4){
       myLocalFunc();
       i++;
    }

}

我的理解是myLocalFunc应该显示用户在main函数中设置的xArr数组的5个值。但是这些值应该在xArr数组中用tmp变量的值覆盖。因此,如果用户提供的值为99,100,101,102,103,那么我期望的输出是:

99 100 101 102 103 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

程序运行但在输出中99 100 101 102 103之后,它在xArr数组中给出了错误的值。如何修复指针中的值赋值?

1 个答案:

答案 0 :(得分:0)

  

所以我使用了指针数组

int **xArr;

要使用命名法迂腐,这不会声明一个数组。这声明了一个指向指针的指针。是的,稍后会指向一系列指针,但仍然需要明白这一区别。

scanf("%d",&xArr[c]);

请注意xArrint**。因此xArr[c]int*。你让用户初始化指向任意内存地址的指针。这很少有任何意义。稍后,当您取消引用这些指针时:

*xArr[c]

您得到未定义的行为,因为那些用户初始化的指针(可能)没有指向已分配的内存。

  

如何修复指针中的值赋值?

不是让用户给你一个任意的指针值,而是将指针指定给你已经分配的一些内存。