我正在使用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数组中给出了错误的值。如何修复指针中的值赋值?
答案 0 :(得分:0)
所以我使用了指针数组
int **xArr;
要使用命名法迂腐,这不会声明一个数组。这声明了一个指向指针的指针。是的,稍后会指向一系列指针,但仍然需要明白这一区别。
scanf("%d",&xArr[c]);
请注意xArr
是int**
。因此xArr[c]
是int*
。你让用户初始化指向任意内存地址的指针。这很少有任何意义。稍后,当您取消引用这些指针时:
*xArr[c]
您得到未定义的行为,因为那些用户初始化的指针(可能)没有指向已分配的内存。
如何修复指针中的值赋值?
不是让用户给你一个任意的指针值,而是将指针指定给你已经分配的一些内存。