学习内容:
1、使用冒泡排序法,将字符串进行排序,按照26个字母大小排序。和数字的冒泡排序类似
#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;
}
如果使用命令行参数 argc:参数的个数 (包括./文件名) argv:具体的参数,指针数组
#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 = 1; i <= length - 1; i++)
{
for (j = 1; 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 = 1; i < length; i++)
{
printf("%s ", a[i]);
}
printf("\n");
}
int main(int argc,char *argv[])
{
int i, j, tmp;
// char *a[10] = {0};
int length = argc;
// GetArray(a, length);
sort(argv, length);
print(argv, length);
return 0;
}
2、右左法则:
例如 :int (*p)() 先看p右边的")",匹配到左边的"(",()里面是一个指针 ,再看p右)右边的“(”,匹配到其右边的“)”
思考:int * ( * ( * fp ) ( int ) ) [10]
fp是一个指针,指针指向一个函数,函数有一个整型参数,函数的返回值是一个指针,指针指向一个数组,数组里有10个元素,每个元素都是一个整型指针。
int * ( * ( * array[5] ) ( ) ) ( )
array是一个数组,里面有五个元素,每个元素都是一个指针,指针指向一个函数,该函数没有参数,函数的返回值是指针指针指向一个函数,该函数没有参数,函数的返回值是指针。
例题:(1)一个指向指针的指针,它指向的指针是指向一个整型数。 int **p;
(2)一个有10 个指针的数组,该指针是指向一个整型数的。 int *p[10];
(3)一个指向函数的指针,该函数有一个整型参数并返回一个整型数。 int (*p)(int);
(4)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数。 int (*p[10])(int)
按照题目,读一句写一句,不断添加。
3、判断语句是否合法
(1)语法是否正确:是否都是地址或者其他。
(2)步长是否相等:+1之后是否都是加4个字节,还是1个字节
不符合上述条件则语句不合法
注:指针数组中是指针,指针4个字节
例如
#include <stdio.h>
int main()
{
char *name[]={"Follow me","BASIC","Great Wall","FORTRAN","Computer desighn"};
char **p;
int i;
for(i=0;i<5;i++)
{
p=name+i;
printf("%s\n",*p);
}
return 0;
}
p=name+i;
name 是指针数组第一个元素的地址,p也是地址,name加1加4个字节,p为二级指针,加1加4个字节,所以合法