学习笔记1:返回指针的函数
题目1:有若干个学生的成绩,每个学生有四门课程,要求在用户输入学生序号以后,能输出该学生的全部程序,用指针函数来实现。
答案:
#include <stdio.h>
void main()
{
double score[][4] = { {60.0,70.0,80.5,90.5},{56.0,89.0,67.0,88.0},{34.2,78.5,90.5,82} };
double *search(double(*pointer)[4], int n);
double *p;
int i, m;
printf("Please enter the number of student:");
scanf("%d", &m);
m += 1;
printf("The scores of No.%d are: \n", m);
p = search(score, m); //传递到这里
for (i = 0; i < 4; i++)
{
printf("%5.2f\t", *(p + i));
}
printf("\n\n\n");
}
double *search(double(*pointer)[4], int n)
{
double *pt;
pt = *(pointer + n);
return pt;
}
运行结果:
指针函数和函数指针的区别
指针函数是指带指针的函数,本质是一个函数
函数指针是指向函数的指针变量,本质是一个指针
学习笔记2:指针数组和指向指针的指针
指针数组是指元素均为指针的数组
形式为:类型名 数组名[数组长度]
例如:int *name[4];\
编程:
#include <stdio.h>
void main()
{
int a[5] = { 1,3,5,7,9 };
int *name[5] = { &a[0],&a[1],&a[2],&a[3],&a[4] };
int i;
for (i = 0; i < 5; i++)
{
printf("%d ", *name[i]);
}
printf("\n\n");
}
运行结果:
题目:将下列字符串按字母顺序由小到大输出
char *name[]={"How are you","What's your name","Thank you","Go home"};
提示:
①可以声明一个数组指针来指向
②将排序利用strcmp()函数来解决
③各个功能抽象为函数或文件
答案:
#include <stdio.h>
#include <string.h>
void main()
{
void sort(char *name[], int n);
void print(char *name[], int n);
char *name[] = { "How are you","What's your name","Thank you","Go home" };
int n = 4;
sort(name, n); //把name的首地址给他,在告诉他有4个字符串
print(name, n);
}
void sort(char *name[], int n)
{
char *temp;
int i, j, k;
for (i = 0; i < n - 1; i++)
{
k = i;
for (j = i + 1; j < n; j++)
{
if (strcmp(name[k], name[j]) > 0)
{
k = j;
}
if (k != i)
{
temp = name[i];
name[i] = name[k];
name[k] = temp;
}
}
}
}
void print(char *name[], int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%s\n", name[i]);
}
}
运行结果:
学习笔记3:指向指针的指针
形式:char **p;
编程:
#include <stdio.h>
void main()
{
char *name[] = { "How old are you?","I am King.","Thank you.","Do you understand?" };
char **p;
int i;
for (i = 0; i < 4; i++)
{
p = name + i; //name+i表示指向下一个元素
printf("%s\n", *p);
}
}
运行结果:
学习笔记4:指针数组做main函数的形参
平时写程序时常用void main(),实际上main函数可以有参数 //目前新版要求写成int main(void),两种都可以,写哪个都无所谓
例如void main (int argc, char *argv[])
argc和argv就是main函数的形参
编程:
#include <stdio.h>
#include <stdlib.h>
void main(int argc, char *argv[])
{
int i;
printf("the number of string is : %d\n", argc - 1);
for (i = 1; i < argc; i++)
{
printf("the string %d is : %s\n", i, argv[i]);
}
}
运行结果:
......一脸懵逼......o((⊙﹏⊙))o .jpg......