使用指针数组完成字符串排序:
在实现这个功能之前,首先我们先要掌握冒泡排序法,然后根据具体情况做一些修改,排序方法就是冒泡排序,下面是代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void GetArray(char *a[], int length)
{
int i;
printf("Please input:\n");
for (i = 0; i < length; i++)
{
a[i] = (char *)malloc(sizeof(char) * 64);
scanf("%s", a[i]);
}
}
void sort(char *a[], int length)
{
int i, j;
char *tmp;
for (i = 0; i < length - 1; i++)
{
for (j = 0; j < length - i - 1; j++)
{
//if (a[j + 1] < a[j])
if (strcmp(a[j + 1], a[j]) > 0)
{
tmp = a[j + 1];
a[j + 1] = a[j];
a[j] = tmp;
}
}
}
}
void print(char *a[], int length)
{
int i;
for (i = 0; i < length; i++)
{
printf("%s ", a[i]);
}
printf("\n");
}
int main()
{
int i, j, tmp;
char *a[10] = {0};
int length = sizeof(a) / sizeof(a[0]);
GetArray(a, length);
sort(a, length);
print(a, length);
return 0;
}
字符串倒序输出:(任意字符),使用getchar;
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
// char *a[100]={"I","am","from","china"};
// printf("%s %s %s %s",a[3],a[2],a[1],a[0]);
char *str=(char *)malloc(sizeof(char)*1024);
char *ptr=str;
int i=0;
char ch;
printf("please input:\n");
while((ch=getchar())!='\n')
{
*(str+i)=ch;
i++;
}
printf("%s\n",str);
while(*str!='\0')
{
if(*str == ' ')
{
*str='\0';
}
str++;
}
while(str!=ptr)
{
str--;
if(*str == '\0')
{
printf("%s ",str+1);
}
}
printf("%s\n",str);
return 0;
}
函数指针:
函数名就是此函数所占内存区的首地址
格式: 类型说明 (* 指针变量名)();
右左法则:
举例 int (*pf) (); 向右:)
向左:说明pf是个指针
向右:()说明其为一个无参类型函数
向左:这个函数是一个返回值为int 型的函数
void (*p)(); //函数指针,指向一个没有形参,没有返回值的函数。
p=print; //因为其函数名就是函数所占内存区的首地址,所以是地址赋给指针。
print(); //或用 p();
int (*q)(int,int) // 关注其类型和个数
q=add // 因为其函数名就是函数所占内存区的首地址,所以是地址赋给指针.
q(1,2);
指针函数又叫指针型函数(返回值是一个指针)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *Init();
{
char *tmp = (char *)malloc(sizeof(char)*100);
return tmp;
}
int main
{
char *str;
str = Init(); //用str去接Init()
strcpy(str,"hello");
return 0;
}
指针数组:
逻辑:& 取地址
* 取值
[]:取值
二维a:指针的指针
一维a:指针
(首地址=行地址=数组地址)
二维数组里用a[1]访问不到一个变量,因为a[1]不存在,仅仅用于语法分析。
二维数组实际是不存在的,在内存也是连续存储的变量,所以在内存中访问不到&a[1].
判断指针传地址是否合法,主要看两个方面。
1.看其是否为指针
2.看其步长是否一致