1. 利用指针变量将一个数组中的数据反向输出
#include <stdio.h>
void reversePrint(int *arr, int len);
int main()
{
int arr[] = {10, 20, 30, 40, 50};
int len = sizeof(arr) / sizeof(arr[0]);
printf("原数组:");
for (int i = 0 ; i < len ; i++)
{
printf("%d ",arr[i]);
}
printf("\n");
reversePrint(arr, len); // 输出: 50 40 30 20 10
return 0;
}
void reversePrint(int *arr, int len)
{
printf("数组反向输出: ");
for (int i = len - 1; i >= 0; i--)
{
printf("%d ", *(arr + i)); // 通过指针访问数组元素
}
printf("\n");
}
2. 利用指针变量计算下标为奇数的数组的和
#include <stdio.h>
int Sum(int *arr, int len);
int main()
{
int arr[] = {1, 2, 3, 4, 5, 6};
int len = sizeof(arr) / sizeof(arr[0]);
printf("原数组:");
for (int i = 0 ; i < len ; i++)
{
printf("%d ",arr[i]);
}
printf("\n");
printf("其中下标为奇数的数是:");
int addsum = Sum(arr, len);
printf("\n下标为奇数的元素和: %d\n", addsum);
return 0;
}
int Sum(int *arr, int len)
{
int sum = 0;
for (int i = 1; i < len; i += 2)
{
sum += *(arr + i);
printf("%d ",*(arr + i));
}
return sum;
}
3. 确认整型,字符型,浮点型指针变量的大小
#include <stdio.h>
int main()
{
int *intt;
char *charr;
float *floatt;
printf("整型指针大小: %zu\n", sizeof(intt));
printf("字符型指针大小: %zu\n", sizeof(charr));
printf("浮点型指针大小: %zu\n", sizeof(floatt));
return 0;
}
4. 利用指针变量输出字符数组中的所有字符
#include <stdio.h>
void pc(char *str);
int main()
{
char str[] = "Hello, World!";
printf("输出: ");
pc(str);
return 0;
}
void pc(char *str)
{
while (*str != '\0')
{
printf("%c", *str);
str++;
}
}
5. 编写一个函数,用指针变量做参数,用于求出一个浮点型数组元素的平均值
#include <stdio.h>
float test(float *arr, int size);
int main()
{
float arr[] = {1.5f, 2.5f, 3.5f, 4.5f};
int len = sizeof(arr) / sizeof(arr[0]);
printf("数组:");
float avg = test(arr, len);
printf("\n平均值: %.2f\n", avg);
return 0;
}
float test(float *arr, int len)
{
if (len == 0) return 0.0f;
float sum = 0.0f;
for (int i = 0; i < len; i++)
{
sum += *(arr + i);
printf("%.2f ", *(arr + i));
}
return sum / len;
}
6. 编写函数,要求用指针做形参,分别实现以下功能:
(1)求一个字符串长度
(2)在一个字符串中统计大写字母的个数
(3)在一个字符串中统计数字字符的个数
#include <stdio.h>
#include <ctype.h>
int stringLength(char *str);
int countUpper(char *str);
int countDigits(char *str);
int main()
{
char str[] = "HelloWorld12345ILoveYou!";
printf("字符串长度: %d\n", stringLength(str));
printf("大写字母个数: %d\n", countUpper(str));
printf("数字字符个数: %d\n", countDigits(str));
return 0;
}
// 求 字符串 长度
int stringLength(char *str)
{
char *ptr = str;// 创建一个临时指针 ptr,指向字符串的起始位置
while (*ptr != '\0')
{
ptr++;
}
return ptr - str;// 指针减法 ptr - str 得到的是两个指针之间的元素个数(即字符串长度)
}
// 统计 大写字母 个数
int countUpper(char *str)
{
int count = 0;
while (*str != '\0')
{
if (isupper(*str))
{
count++;
}
str++;
}
return count;
}
// 统计 数字字符 个数
int countDigits(char *str)
{
int count = 0;
while (*str != '\0')
{
if (isdigit(*str))
{
count++;
}
str++;
}
return count;
}
7. 编写函数,要求用指针做形参,实现将二维数组(行列相同)的进行转置(行列数据互换): int (*p)[N]
#include <stdio.h>
#define N 3
void transpose(int (*p)[N]);
void printArray(int (*p)[N]);
int main()
{
int arr[N][N] ={{1, 2, 3},{4, 5, 6},{7, 8, 9}};
printf("转换前:\n");
printArray(arr);
transpose(arr);
printf("转换后:\n");
printArray(arr);
return 0;
}
// 打印二维数组
void printArray(int (*p)[N])
{
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
printf("%-4d", *(*(p + i) + j));
}
printf("\n");
}
printf("\n");
}
// 二维数组转换
void transpose(int (*p)[N])
{
for (int i = 0; i < N; i++)
{
for (int j = i + 1; j < N; j++)
{
int temp = *(*(p + i) + j);// 相当于:p[i][j];
*(*(p + i) + j) = *(*(p + j) + i);
*(*(p + j) + i) = temp;
}
}
}