c 指针问题:为什么修改数组中的值,输出是还是没有变?

作者&投稿:钟离毕 (若有异议请与网页底部的电邮联系)
c 指针问题:为什么修改数组中的值,输出是还是没有变?~

注意看:
p = &(bor[ROW][COL]);


数组没有这个元素,这个元素已经越界了,没崩溃是因为你编译的是debug版本吧。注意C/C++中的数组索引是从0开始!!!
你是修改最后一行,最后一列的元素,应该这样给指针p赋值
p = &(bor[ROW - 1][COL - 1]);

1、max的初值应该小些,min的初值应该大些,你这里给min=0就不合适了

2、那个find函数中的while中的逻辑有点问题。我是这么改的:
while(i<elementSize)
{
if(string[i]>='0' && string[i]<='9')
{
*(array+j)=*(array+j)*10+(string[i]-'0');

if(string[i+1]'9') //注意这里是逻辑或
{
j++;
}
i++;
}
else
{
i++;
}
}

3、关于用指针返回
改变形参这个变量的值是不会返回的。
指针也是一个变量,只改变指针变量的值(即地址)自然也是不会返回的。
要返回的话是要改变指针所指向的变量的值。
所以find函数的后半部分可改为:
for(i=0;i<=j-1;i++)
{
if(array[i]>*maxPtr)
*maxPtr=array[i]; //改
if(array[i]<*minPtr)
*minPtr=array[i]; //改
}
return j;

4、对比的看下下面两组替换,也许可以加深你对指针用于返回的理解
int_of_array=find(string,i,array,SIZE,maxPtr,minPtr);
可用下面的等价替换:
int_of_array=find(string,i,array,SIZE,&max,&min); //maxPtr==&max

printf("整数中最大值是:%d
",*maxPtr);
printf("整数中最小值是:%d
",*minPtr);
可用下面的等价替换:
printf("整数中最大值是:%d
",max); //max的值在find函数中通过对*maxPtr操作而修改
printf("整数中最小值是:%d
",min);

没看到主函数,不知道你是怎样赋初值,如何改变值,如何显示值。

for (int i = 0; i < ROW; i++) 和 for(int j = 0; j < COL; j++) 明示声明了 int bor[ROW][COL];那么下标最大是 bor[ROW-1][COL-1]。
p = &(bor[ROW][COL]); bor的2个下标都超界了。
*p = 99;未改变bor数组中的任何值。

值函数的参数传递都是值传递(除了引用),在子函数中只是对传入参数的一份拷贝惊醒修改,而源地址中的数据保持不变。

相信楼主一定看到过swap函数,对于swap(int, int) 和 swap(int *, int *)的区别肯定是知道,就是这个原理!


双柏县17011606436: 在C程里,为啥用指针做形参的函数可以改变实参数组的值? -
盍魏大活: C语言参数传递是值传递, 也就是拷贝一份参数到函数中.指针作为形参, 会拷贝指针在函数中使用.如果改变指针的值是没有效果的,因为这只是参数的一份拷贝.如果改变指针指向的值是有效的, 因为该指针指向的内存在内存中是唯一的.

双柏县17011606436: C语言中的指针为什么会改变变量的值?
盍魏大活: 回答: pa 指向的是a的地址 *pa 就相当于 变量a 这是指针的特性 追问: 也就说只要pa最后一次指向某一个变量值的地址以后、然后再改变*pa值、就等于说把pa最后一次指的那个变量值地址也同时改变了吗? 回答: 不是改变地址 是改变pa最...

双柏县17011606436: 定义了一个常数组,为什么能用指针改变数组元素的值? -
盍魏大活: 这个问题稍微有些复杂.通过const声明的常量变量,只是保证在写代码时不能通过变量名(本例是a)更改变量的值,但依然可以通过其他方式修改变量所在的内存上的值,比如通过指针.另外常量变量有两种存放位置:如果定义在函数内部,它存放在函数的栈帧中(本例就是这种情况);如果定义在全局,它存放在进程内存的常量区.对于前者,通过指针修改不仅能通过编译,也能正常运行,并且真实地修改掉了常量变量所在内存上存储的值.对于后者,由于进程内存的常量区是只读不可写的,如果通过指针修改它的值,所以尽管能通过编译,但是会在运行时发生内存读写异常,操作系统报错.

双柏县17011606436: 怎样通过指针来改变数组的值 -
盍魏大活: 数组的名字其实就是指针,例如 你定义int a[1000];那么a的值表示这个数组的第一个数据的地址,或者说(a==&(a[0])),那么((a+1)==&(a[1])) 例如: int a[6]={1,1,2,3,8,-10}; //如果你再定义一个int * ptr; int *ptr=a;//这样只是为a换个名字而已,你可以像使用a那么样去使用ptr; for(int i=0;i<6;i++) {a[i]=999; //或者下面几行//*(a+i)=999;//p[i]=999;//*(p+i)=999; }

双柏县17011606436: C新手问题,指针数组的 -
盍魏大活: 楼主你学漏了一些知识点,给你补充一下吧. 第一: 例如: void main() {int a[2],x; a=&x; } 在上面的例子中,如你所想的,a是数组名,就是数组的首地址,那么把int型x的地址值赋给a应该是没问题吧?是不? 错!其实在你定义数组a时,在内...

双柏县17011606436: C语言程序设计 如何通过指针修改字符串数组的值 求解 -
盍魏大活: 你哪里修改str的值了?从头到尾str里的值就没动过啊!char str[10]="hello",*p; // str初始化为"hello" p=str; // 指针p指向str p="world"; // 指针指向静态区域"world“以后,就和str没关系了

双柏县17011606436: 指针数组改变值 -
盍魏大活: 你这样定义字符串的话,就意味着它是个字符串常量,它是储存在静态区的,所以你直接操作String指针去改变里面的东西会出错的.要想改变它,你可以定义一个字符数组把它储存起来,再改就行了.

双柏县17011606436: C语言关于指针问题. -
盍魏大活: char *b="xkcnghkj";后面的是常量啊,编译后会把这段常量放在某个段中,然后把b指向该常量所在地址,但是你无法修改里面的值(你可以认为这个段是只读的),但是如果是数组的话,数组比那两是存放在堆栈中的,后面的“”里面的内...

双柏县17011606436: C语言 通过指针改变数组的值 -
盍魏大活: void swap(int p); //你这个是在声明一个函数,而不是调用函数,改成这样:swap(p); //调用函数,调用函数时就是函数名加参数就好

双柏县17011606436: C++ 形参为指向数组的指针,为甚麽指针的值可以改变啊 -
盍魏大活: 形参为指向数组的指针的时候指针的值是可以改变的,最开始的时候它指向数组的某个字符(这要看你传的形参了),可以向后移动,也可以向前移动,参数问题:如果传...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网