7.27日报

学习内容:

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个字节,所以合法

猜你喜欢

转载自blog.csdn.net/qq_42487214/article/details/81253113