C语言指针的用法

来源:百度知道 编辑:UC知道 时间:2024/06/23 08:36:16
#include<stdio.h>
#include<math.h>
#include <conio.h>
void sort(char *a[],int n)
{
int i,j;
char temp;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(strcmp(a[i],a[j]<0))
{
temp=*a[i];
*a[i]=*a[j];
*a[j]=temp;
}
}

int main()
{
char *a[3];
int i;
for(i=0;i<3;i++)
a[i] = (char *)malloc(sizeof(char));
for(i=0;i<3;i++)
scanf("%s",a[i]);
sort(a,3);
for(i=0;i<3;i++)
printf("%s\n",a[i]);
getch();
}
上面程序可以运行
但结果错误
是比较三个字符串的大小
请高手指点下
如果可以请讲解指针的一些具体用法
请不要拷贝
回答好的我会加分
谢谢
923那个是正确的
不过是STRCMP函数的括号打错了
我想问个问题是
STRCMP里面比较的是指针地址
那么比较地址能得出结果??

#include<stdio.h>
#include<math.h>
#include <conio.h>
void sort(char *a[],int n)
{
int i,j;
char *temp;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(strcmp(a[i],a[j]<0))
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}

int main()
{
char *a[3];
int i;
for(i=0;i<3;i++)
a[i] = (char *)malloc(sizeof(char));
for(i=0;i<3;i++)
scanf("%s",a[i]);
sort(a,3);
for(i=0;i<3;i++)
printf("%s\n",a[i]);
getch();
}
应该改成这样
其中
char *temp;
temp=a[i];
a[i]=a[j];
a[j]=temp;
做了修改

原因如下:未修改前temp是一个字符变量,而*a[i]是指针a[i]所指向的内容,就把需要交换的字符串的首字符交换了。
你要交换的是指针或者说是地址,而不是指针里的内容。这就是问题所在。
在temp前加*就表示temp也是个指针,再把a[i]前的*去掉,就实现了交换指针地址的目的。

指针的声明要加*例如
int *a;
使用的时候如果事指针操作则不要带*例如
char *a = “hank”;
a++;此时a指向的字符串就变成了“