怎样采用指针逆置一维数组,用函数实现

怎样采用指针逆置一维数组,用函数实现

void rev(int *p,int n) //调用时形参为整型数组名,元素个数:

void reverse(int *a, int n)

{

int *p,*q, temp;

p = a;

q = a +n - 1;

for (; p < q; p ++, q --)

{

temp = *p;

*p = *q;

*q= temp;

}

}

扩展资料

改变形参不代表改变实参

不能企图通过改变指针形参的值而使指针实参的值改变。 

程序运行时,从main函数开始执行,通过scanf函数给a和b赋值,输入8和10,将a的地址和b的地址分别赋值给指针变量ap1和ap2,使指针ap1指向a,ap2指向b。

接着执行if语句,由于a<b,调用conter函数,将a和b的地址传递给x和y。继续执行conter函数的函数体,交换x和y的地址,使形参x的值为&b,y的值为&a,但是无法使ap1指向变量b的地址,ap2指向变量a的地址。故不能实现交换。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-01-04

void rev(int *p,int n) //调用时形参为整型数组名,元素个数:

void reverse(int *a, int n)
{
int *p,*q, temp;
p = a;
q = a +n - 1;
for (; p < q; p ++, q --)
{
temp = *p;
*p = *q;
*q= temp;
}
}

扩展资料:

一维数组的定义格式如下:

类型标识符 数组名[常量表达式]

说明:

①数组名的命名规则与变量名的命名规则一致

②常量表达式表示数组元素的个数。可以是常量或符号常量,不能为变量。

通过给出的数组名称和这个元素在数组中的位置编号(即下标),程序可以引用数组中的任意一个元素。

在C++中,一维数组的引用格式为:数组名[下标]

例如: int a[10];

其中,a是一维数组的数组名,该数组有10个元素,依次表示为a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]。需要注意的是,a[10]不属于这一个数组的空间范围中。当在说明部分定义了一个数组变量后,编译程序会在内存空间中开辟一串连续的存储单元。

对于数组而言,程序的执行部分使用的是数组变量而不是数组类型。需要注意的是:在引用时,下标可以是整型变量或整型表达式。如果使用表达式,会先计算表达式以确定下标。程序只能逐个应用数组中的元素而不能一次引用整个数组。

本回答被网友采纳
第2个回答  2010-11-21
这里是一个用指针逆置一个11个元素的字符数组(不是字符串),你也可以把char全都用int替换变成一个n个元素的整数数组,这个程序在vc6通过调试了
#include<stdio.h>
void reset(char * array,int size)
{
int i;
char ch;
for(i=0;i<=size/2;i++)
{
ch=*(array+i);
*(array+i)=*(array+size-1-i);
*(array+size-1-i)=ch;
}
}
void main()
{
int i;
char array[11]={'a','b','c','d','e','f','g','h','i','j','k'};
reset(array,11);
for(i=0;i<11;i++)
printf("%c",*(array+i));
printf("\n");
}本回答被网友采纳
第3个回答  2016-01-05
void rev(int *p,int n) //调用时形参为整型数组名,元素个数
{int *q,t;
for(q=p+n-1;p>q;)
{t=*p;*(p++)=*q;*(q--)=t;}
}
第4个回答  2010-11-25
/*--
gcc 版本 4.2.3 (Ubuntu 4.2.3-2ubuntu7)
--*/
#include<stdio.h>
#define num 3
int sort(char *ch);
int changepalce(char *a,char *b);
int main()
{
int i,j;
char ch[num];
printf("Input %d numbers,divide by space:\n",num);
//for(i = 0; i < num; i++)
// scanf("%c",&ch[i]);
scanf("%c %c %c",&ch[0],&ch[1],&ch[2]);
sort(ch);
return 0;
}
int sort(char *ch)
{
int i,j;
for(i = 0; i < num-1; i++)
{
for(j = 0; j < num-i-1; j++)
{
if(ch[j] > ch[j+1])
changeplace(&ch[j],&ch[j+1]);
}
}
printf("From small to big:\n");
for(i = 0; i < num; i++)
printf("%c ",ch[i]);
printf("\n");
return 0;
}
int changeplace(char *a,char *b)
{
char temp;
temp = *a;
*a = *b;
*b = temp;
return 0;
}

我在gcc下编译是通过的,有问题再一起讨论。good luck^_^

相关了解……

你可能感兴趣的内容

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