使用c语言完成,实验内容一:1. 指向函数的指针变量的定义和引用;2. 返回指针值的函数的定义和引用;3. 指向函数的指针变量作为函数参数。 实验内容二:多级指针。1、输入N个字符串,运用指针数组操作对其排序;2、定义一个二维数组,用行指针实现数据的输入与输出;3、验证主函数参数的使用;4、验证内存的动态分配函数的使用
时间: 2023-11-22 08:56:36 浏览: 92
实验内容一:
1. 指向函数的指针变量的定义和引用
指向函数的指针变量,可以指向同一类型的函数。下面是一个例子:
```
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
int (*p)(int, int);
p = add;
printf("1 + 2 = %d", p(1, 2));
return 0;
}
```
2. 返回指针值的函数的定义和引用
返回指针值的函数,可以返回指向同一类型的数据的指针。下面是一个例子:
```
#include <stdio.h>
int* create_array(int size) {
int* arr = (int*) malloc(size * sizeof(int));
for (int i = 0; i < size; i++) {
arr[i] = i + 1;
}
return arr;
}
int main() {
int* arr = create_array(5);
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
free(arr);
return 0;
}
```
3. 指向函数的指针变量作为函数参数
指向函数的指针变量,可以作为函数参数。下面是一个例子:
```
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int calculate(int a, int b, int (*p)(int, int)) {
return p(a, b);
}
int main() {
printf("1 + 2 = %d", calculate(1, 2, add));
return 0;
}
```
实验内容二:
1. 输入N个字符串,运用指针数组操作对其排序
指针数组可以用来储存字符串的地址,然后通过比较字符串的内容,实现字符串的排序。下面是一个例子:
```
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 100
#define MAX_NUM 5
int main() {
char str[MAX_NUM][MAX_LENGTH];
for (int i = 0; i < MAX_NUM; i++) {
printf("Enter string %d: ", i + 1);
scanf("%s", str[i]);
}
for (int i = 0; i < MAX_NUM - 1; i++) {
for (int j = i + 1; j < MAX_NUM; j++) {
if (strcmp(str[i], str[j]) > 0) {
char tmp[MAX_LENGTH];
strcpy(tmp, str[i]);
strcpy(str[i], str[j]);
strcpy(str[j], tmp);
}
}
}
printf("Sorted strings:\n");
for (int i = 0; i < MAX_NUM; i++) {
printf("%s\n", str[i]);
}
return 0;
}
```
2. 定义一个二维数组,用行指针实现数据的输入与输出
二维数组可以用指针的方式来操作。例如,用一个指针数组来表示二维数组的每一行。下面是一个例子:
```
#include <stdio.h>
#include <stdlib.h>
#define ROWS 3
#define COLS 4
int main() {
int** arr = (int**) malloc(ROWS * sizeof(int*));
for (int i = 0; i < ROWS; i++) {
arr[i] = (int*) malloc(COLS * sizeof(int));
}
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("Enter element [%d][%d]: ", i, j);
scanf("%d", &arr[i][j]);
}
}
printf("Entered array:\n");
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
for (int i = 0; i < ROWS; i++) {
free(arr[i]);
}
free(arr);
return 0;
}
```
3. 验证主函数参数的使用
主函数的参数可以用来获取命令行参数,例如:
```
#include <stdio.h>
int main(int argc, char* argv[]) {
printf("Program name: %s\n", argv[0]);
printf("Arguments:\n");
for (int i = 1; i < argc; i++) {
printf("%s\n", argv[i]);
}
return 0;
}
```
4. 验证内存的动态分配函数的使用
内存的动态分配函数,包括 malloc、calloc 和 realloc。下面是一个例子:
```
#include <stdio.h>
#include <stdlib.h>
int main() {
int* arr = (int*) malloc(5 * sizeof(int));
for (int i = 0; i < 5; i++) {
arr[i] = i + 1;
}
int* new_arr = (int*) realloc(arr, 10 * sizeof(int));
if (new_arr != NULL) {
arr = new_arr;
for (int i = 5; i < 10; i++) {
arr[i] = i + 1;
}
}
printf("Array:\n");
for (int i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
free(arr);
return 0;
}
```
阅读全文