c语言交换两个指针
Ⅰ 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语言中,交换两个指针变量的值(即a和b的地址),而不是交换整形变量的值,这样是算法用在那些地方
排序,特别是字符串排序或结构体数组排序。交换两个指针与交换一个整型变量竖祥一样简单,链纤御而要交换两个棚岩字符串或结构体却要较大的空间开销和时间开销……
Ⅲ 关于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语言的指针交换问题
在你的主函数里你定义了两个指针变量p和q,分别指向i和j,在你的swap函数里你又定义了两个指针变量a和b,p和q,a和b,都是存着i和j的地址,这里t=a;a=b;b=t,只是把a和b所指向的内存互换了,而本身p和q所指向的山李内存是没有变化的,所以你主锋弊函数里printf("%d %d\n",*p,*q);还是3和5!
你可以银唯族把t=a;a=b;b=t修改成*t=*a;*a=*b;*b=*t,这样你是对i和j的值互换!
Ⅳ c语言用指针交换两个数
在 huan(int *p1,int *p2)这个函数中,交换的只是两个指针的指向,但是函数的结束并穗、返庆和回,这两个指针本身就誉蔽盯消失了(它们的值并不会传回到main()函数中)所以,最后的结果没有交换。
如果要起到交换的作用,这个函数应该这样写:
void huan(int *p1,int *p2)
{
int t;
t=*p1;
*p1=*p2;
*p2=t;
}
Ⅵ C语言 交换指针
int拆枯p[];
=>
p=&p=&p[0]
&p , 可视作一个忽略[0]语法标示的缩写.
swap(&p,&q);
=>
swap(&p[0],&q[0]);
=>
1<=>5
基本上变量宣告后, 其位址不可变更. 此功能腊知应采用额外的指针变量, 进轮御消行交换操作.
Ⅶ C语言中,有一个指向指针数组的指针,我想要问要怎么交换两个指针的值来做到,将指针数组里的指针排序。
int *arry[10]; //指针数组 int (*arryp)[10]; //数盯行组指针,因为数组指针指向数组滑岁,而数组也可看做是个指针,那数组指针可以理解为一个二 级指针 int a[10]; arryp = &a; //将数组地址个数组指针 arry[0] = *arryp; //arry[0]是一级指针,要将数组指针赋信则睁给指针数组,就要取内容,实际就是 arry[0] = a;
Ⅷ C语言:将两个字符指针的内容交换
Ⅸ c语言 交换指针内容
一般逗陪的做法是无效山明蠢槐租的,因为产生的是一个临时指针,在函数里改变,到函数外面的时候,原来的指针没变,这样就用指针的指针
void swap(int** p,int** q)
{
int* temp;
temp = *p;
*p = *q;
*q =temp;
}
调用的时候就
int* p,*q;
swap(&p,&q);
Ⅹ C语言 交换两个不同长度的字符串指针 定义交换两个不同长度的字符串指针
长度不同,两者存放亮裂单元的个数应当都大于 最长的字符串,否则交换以后 存不下,会出错。
#include <stdio.h>
#include <stdlib.h>
void jh(char *p1, char *p2){
char *t;
int i,L;
L = strlen(p1);
if (strlen(p2) > L) L = strlen(p2);
t = (char *) malloc(sizeof(char) * L);
strcpy(t,p1);strcpy(p1,p2);strcpy(p2,t); //碧亮 交换
}
main(){
char s1[100]="abc", s2[100]="1234567"; // 实际允许存放量必需足敬慧闭够大
printf("%s %s \n",s1,s2);
jh(s1,s2);
printf("%s %s \n",s1,s2);
return 0;
}