当前位置:首页 » 编程语言 » c语言中如何交换指针
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言中如何交换指针

发布时间: 2022-08-04 00:20:55

c语言中,怎么交换指针数组里的值

程序主要通过冒泡法使用函数strcmp比较两指针所值字符串大小,通过临时指针交换两指针指向,实现字符串排序,代码如下,
//程序功能,从小到大排序10个字符串
#include <stdio.h>
#include <string.h>
void bubble_sort(char *a[], int n);

int main(int argc, char *argv[])
{
char a[10][20]={0};//存储10个字符串
char *p[10];//指向10个字符串
int i=0;
for(i=0;i<10;i++)
{
gets(a[i]);//输入字符串
p[i]=a[i];//指向字符串
}
for(i=0;i<10;i++)
{
puts(a[i]);//输出原字符串
}
bubble_sort(p,10);
for(i=0;i<10;i++)
{
puts(p[i]);//输出排序后字符串
}

return 0;
}
//冒泡法排序,从小到大排序
void bubble_sort(char *a[], int n)
{
int i, j;
char *temp;
for (j = 0; j < n - 1; j++)
for (i = 0; i < n - 1 - j; i++)
{
if(strcmp(a[i],a[i+1])>0)//交换指针
{
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
}
}

int strcmp( const char *str1, const char *str2 );比较字符串str1、str2,返回值大于0,str1>str2,返回值小于0,str1<str2,返回值等于0,str1==str2。

Ⅱ c语言指针交换求解!!!

这个是这样的,因为指针变量一般就是32位的长度,同样int类型也是32位的长度,p1里面的地址也是能放在p里面存储的(char
,short类型就不行了)。但是对于编译器来说,存放在p里面,他就认为是一个整数,所以就不能做一些指针的操作了,比如*p。但是如果只是向你这种只是简单交换一下值是没问题的。

Ⅲ 关于C语言交换两个数(有关指针)

在C语言中,通过函数参数传递,进行两个数的交换,必须采用传递指针的方式,同时,在函数中,一定要对两个指针中的数据内容进行交换才能达到交换实参地址中数据的目的。

如:

//正确的交换函数
voidswap1(int*p1,int*p2)
{
intp;
p=*p1;//通过*引用地址中的数据,进行交换
*p1=*p2;
*p2=p;
}
//错误的交换函数
voidswap2(int*p1,int*p2)
{
int*p;
p=p1;//这里进行改变的是形参的值,而形参只是实参的一个副本,形参本身的变化,是不能改变实参的值的!!
p1=p2;
p2=p;
}

PS:要正确认识C语言中的实参与形参,形参在使用中只是实参的副本,若形参是指针,我们可以通过形参改变实参地址中的内容,但无法改变实参本身的值!

Ⅳ 在C语言中的 交换指针地址问题

值传递在函数调用过程中,函数内部将参数拷贝一份,而并不改变元参数的值。而指针传递,才在函数内部改变传入参数的值。如果你要传入的参数是指针,可以改变的是指针指向的具体内容的值,而你如果要在函数内部改变指针的值,你需要传入的是指针的地址,也就是指针的指针。将你的Change函数的参数改为(int **p, int **q), 然后再调用的时候改为change(&p, &q)即可。
希望对你又帮助。

Ⅳ c语言的指针交换问题

//C语言的参数传递方式是传值。第二个改为:
#include<stdio.h>
void swap(int *a,int *b) //交换a,b的值,不起任何作用。应该交换a,b所指对象的值。
{
int t;
t=*a;*a=*b;*b=t;
}
main()
{
int i,j,*p=&i,*q=&j;
printf("please input i and j:\n");
scanf("%d%d",&i,&j);
swap(p,q);
printf("%d %d\n",*p,*q);
}

Ⅵ C语言中,有一个指向指针数组的指针,我想要问要怎么交换两个指针的值来做到,将指针数组里的指针排序。

int *arry[10]; //指针数组 int (*arryp)[10]; //数组指针,因为数组指针指向数组,而数组也可看做是个指针,那数组指针可以理解为一个二 级指针 int a[10]; arryp = &a; //将数组地址个数组指针 arry[0] = *arryp; //arry[0]是一级指针,要将数组指针赋给指针数组,就要取内容,实际就是 arry[0] = a;

Ⅶ C语言 交换指针

intp[];
=>
p=&p=&p[0]


&p , 可视作一个忽略[0]语法标示的缩写.


swap(&p,&q);
=>
swap(&p[0],&q[0]);
=>
1<=>5

基本上变量宣告后, 其位址不可变更. 此功能应采用额外的指针变量, 进行交换操作.

Ⅷ c语言指针交换

这个是这样的,因为
指针变量
一般就是32位的长度,同样int类型也是32位的长度,p1里面的地址也是能放在p里面存储的(char
,short类型就不行了)。但是对于
编译器
来说,存放在p里面,他就认为是一个整数,所以就不能做一些指针的操作了,比如*p。但是如果只是向你这种只是简单交换一下值是没问题的。

Ⅸ C语言字符串交换,指针

调用的是std::swap(这个函数,而不是你写的这个,要验证也很简单,你可以在你写的swap里加一行cout就知道了,不会输出。
1,可以去掉using namespace std,这样编译器会警告甚至错误,警告的情况下你也不能正确交换指针。
2,如果你使用其他std的东西,那请在main里调用swap时,写成::swap,编译器就会给警告甚至错误了,并且也不能正确交换。
3,如果不想这么改,把它改成swap1即可。