苏嵌学习日志4

学习日志

姓名:唐小玲 日期:2018.7.12

 

 

今日学习任务

 

1. 指针与函数

2. 指针数组

3. 数组指针

4. 指针的指针

5. 命令行参数

 

 

今日任务完成情况

 

(详细说明本日任务是否按计划完成,开发的代码量)

1. 了解了单词位置倒置,不改变单词内部结构的程序

2. 函数指针的实现

3. 字符串排序

4. 指针型函数的实现

5. 用指针输出数组

6. 指针的指针的用法

 

今日开发中出现的问题汇总

 

个人指针及数组这一部分知识点理解起来比较困难,掌握程度不够,编写程序的时候有很多问题,需要重新多加练习编写代码。

 

今日未解决问题

 

依旧不会独立编写难度稍高的代码。

 

 

今日开发收获

 

1.函数指针变量定义

例如: int(*pf)();

表示pf 是一个指向函数入口的指针变量,该函数的返回值()是整型

2.函数指针的应用

#include <stdio.h>

void print()

{

printf("hellowold!\n");

}

int add()

{

}

int main()

{

int a = 1, b=2;

void (*p)(); // 定义变量 定义一个函数指针

int(*p2)(int ,int);

print(); //函数调用

p = print;

p(); //通过函数指针调用函数

    p2 = add;

printf("sum = %d\n",p2(a,b));

while(1);

return o;

}

3.排序(函数指针)

#include <stdio.h>

#define SIZE 5

int big(int x, int y)

{

return(x > y) ? 1 : 0; //条件表达式

}

 

int less(int x, int y)

{

return(x < y) ? 1 : 0; //条件表达式

}

void GetArray(int a[])

{

int i;

for(i =0; i <SIZE; i++)

{

scanf("%d", &a[i]);

}

}

void sort(int a[], int(*p)(int, int))

{

int i,j,tmp;

for(i=0; i < SIZE-1; i++)

{

for(j=0; j < SIZE-i-1; j++)

{

if(p(a[j],a[j+1)) // 函数调用法

//if(a[j] > a[j+1])

{

tmp = a[j];

    a[j] = a[j+1];

    a[j+1] = tmp;

}

}

}

}

void print(int a[])

{

int i;

for(i=0; i< SIZE; i++)

{

printf("%d", &a[i]);

}

printf("\n");

}

int main()

{

int a[SIZE]= {0}

GetArray(a);

sort(a, big /*lees*/); // less: 函数指针作为一个函数的参数

print(a);

while (1);

return 0;

}

4.指针型函数(返回指针)

#include <stdio.h>

char *GetString()// 指针型函数

{

char *str= (char*)malloc(sizeof (char) * 32);

strcpy(str,"helloworld!");

return str

}

int main()

{

char *ptr;

ptr = GetString;

printf("%s\n",ptr);

while (1);

return 0;

}

5.思考

下面两个表达式什么意思?

Int *(*(*fp)(int))[10];

fp是一个指针,指向函数,函数有一个int 类型参数,函数返回值时一个指针,指向一个有10个元素的数组,每个元素都是一个整型指针                                      

Int*(*(*array[5])())();

函数指针函数指针数组

array是一个数组,有5个元素,每个元素都是指针,指向一个函数,函数没有形参,返回值是一个整型指针

6.用变量a给出下面的定义

1)一个整型数 int a;

2)一个指向整型数的指针  int *a;

3)一个指向指针的指针,它指向的指针是一个整型数   int **a;

4)一个有10个整型数的数组   int a[10];  

5)一个有10个指针的数组,该指针指向一个整型数int *a[10]

6)一个指向有10个整型数数组的指针  int(*a)[10]

7)一个指向函数的指针,该函数有一个整型参数并返回一个整型数   int (*a)(int);

8)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

int (*a[10])(int)

7.指向二维数组的指针的几种表现形式

&a 数组的地址 单位 48字节

a   首行的地址 单位16字节

a[0]  *a  *(a+0) 意义一样 首行元素地址 单位4字节

a +1  &a[1] 第二行地址 单位16字节

8.二维数组与指针运算

#include <stdio.h>

int main()

{

int a[3][4] = {{1,2,3,4},{3,4,5,6},{5,6,7,8}};

int i;

int(*p)[4]=a,*q=a[0];

for(i=0;i<3;i++)

{

if(i==0)

(*p)[i+i/2]=*q+1;

else

p++,++q;

}

for(i=0;i<3;i++)

{

printf("%d,",a[i]a[i]);

}

printf("%d,%d\n",*((int*)p),*q)

while(1);

return 0;

 

自我评价

(是否按开发规范完成既定任务,需要改进的地方,与他人合作效果等)

一些简单的练习能够做出,但是有一些小知识点遗忘了,不够熟练,需要多多实践练习!

 

 

作业

1.字符串排序

 

#include<stdio.h>

 

#include<string.h>

 

#include<stdlib.h>

 

#define SIZE 3

 

void sort(char *string[],int length)

 

{

 

int i,j;

 

char *t;

 

for(j=0;j<length-1;j++)

 

{

 

    for(i=0;i<length-j-1;i++)

 

{

    if(strcmp(string[i],string[i+1])>0)

 

{

 

      t=string[i];

 

      string[i]=string[i+1];

      string[i+1]=t;

 

}

 

}

 

}

 

}

 

int main(int argc, char *argv[])

 

{

 

int i;

 

sort(argv,argc-1);

 

printf("The string after sort:\n");

 

for(i=1;i<argc;i++)//输出

{

  printf("%s ",argv[i]);

}

    while(1);

    return 0;

}

 

2.冒泡排序程序

#include <stdio.h>

void sort(int *a[],int argc)

 

{

int i, j, tmp;

 

for (i = 0; i < argc - 1; i++)

{

for (j = 0; j < argc - i - 1; j++)

{

if (a[j] < a[j + 1])

{

tmp = a[j];

a[j] = a[j + 1];

a[j + 1] = tmp;

}

}

}

}

 

void print(int *a[],int argc)

{

 int i;

for (i = 1; i < argc; i++)

{

printf("%d ", a[i]);

}

printf("\n");

}

 

int main(int argc, int *argv[i])

{

sort(argv,argc);

print(argv,argc);

 

while (1);

return 0;

}

 

 

猜你喜欢

转载自blog.csdn.net/qq_36974603/article/details/81022950