當前位置:首頁 » 編程語言 » 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即可。