学习日志
姓名:唐小玲 日期: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; } |