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;
}