目录
1.
指针指向数组1. 一维数组的数组名,本质上是一个该数组的第一个元素的地址
int arr[5]; arr &arr[0]
2. 数组名是一个地址常量,不能被重新赋值,但是,数组名可以进行偏移
3. 二维数组的数组名,从数值上来说也是一个该数组第一个元素的地址
int arr[3][4]; arr <==> &arr[0]; arr[0] <==>&arr[0][0]; arr[1] <==>&arr[1][0]
- #include
-
-
-
- int main(int argc, const char *argv[])
-
- {
-
- //定义一个一维数组
-
- int arr[] = {3,8,3,2,4};
-
- int len = sizeof(arr)/sizeof(arr[0]); //求数组长度
-
-
-
- //定义指针指向一维数组
-
- int *ptr = arr; //int *ptr = &arr[0];
-
-
-
- //数据输出方式1,从值的角度
-
- printf("数据元素分别是:");
-
- for(int i=0; i
-
- {
-
- printf("%d\t", arr[i]);
-
- }
-
- printf("\n");
-
-
-
- //输出方式2:从数组名的角度
-
- printf("数据元素分别是:");
-
- for(int i=0; i
-
- {
-
- printf("%d\t", *(arr+i) );
-
- }
-
- printf("\n");
-
-
-
- //输出方式3:从指针变量的角度
-
- printf("数据元素分别是:");
-
- for(int i=0; i
-
- {
-
- printf("%d\t", *(ptr+i) );
-
- }
-
- printf("\n");
-
-
-
- //输出方式4:从指针的角度找值
-
- printf("数据元素分别是:");
-
- for(int i=0; i
-
- {
-
- printf("%d\t", ptr[i]);
-
- }
-
- printf("\n");
-
-
-
- //输出方式5:从指针变量的角度
-
- printf("数据元素分别是:");
-
- for(int i=0; i
-
- {
-
- printf("%d\t", *(ptr++));
-
-
-
- }
-
- printf("\n");
-
-
-
- return 0;
-
- }
1.2.2 指针指向一维整型数组作为函数参数传递
当实参使用的是数组名进行传递时,本质上传递的是数组首元素的地址
被调函数的形参可以是一个数组接收,也可以是一个指针变量接收
虽然使用的是数组接收,但是,本质上也还是使用的是指针接收
例如:主函数中定义一个长度为8的数组,调用自定义函数完成输入、自定义函数完成输出、自定义函数求最大值、自定义函数完成数组的逆置。并对这些函数进行测试。要求,形参使用指针接收
- #include
-
-
-
- #define MAX 8
-
-
-
- // 函数声明
-
- void inputArray(int *arr, int length);
-
- void outputArray(const int *arr, int length);
-
- int findMaxValue(const int *arr, int length);
-
- void reverseArray(int *arr, int length);
-
-
-
- int main() {
-
- int arr[MAX];
-
-
-
- printf("请输入%d个整数:\n", MAX);
-
- inputArray(arr, MAX); // 输入数组
-
-
-
- printf("输入的数组为:\n");
-
- outputArray(arr, MAX); // 输出数组
-
-
-
- int maxVal = findMaxValue(arr, MAX); // 求最大值
-
- printf("数组中的最大值是:%d\n", maxVal);
-
-
-
- reverseArray(arr, MAX); // 逆置数组
-
-
-
- printf("逆置后的数组为:\n");
-
- outputArray(arr, MAX); // 输出逆置后的数组
-
-
-
- return 0;
-
- }
-
-
-
- // 输入数组元素
-
- void inputArray(int *arr, int length) {
-
- for (int i = 0; i < length; i++) {
-
- scanf("%d", arr + i);
-
- }
-
- }
-
-
-
- // 输出数组元素
-
- void outputArray(const int *arr, int length) {
-
- for (int i = 0; i < length; i++) {
-
- printf("%d ", arr[i]);
-
- }
-
- printf("\n");
-
- }
-
-
-
- // 求数组的最大值
-
- int findMaxValue(const int *arr, int length) {
-
- int max = arr[0];
-
- for (int i = 1; i < length; i++) {
-
- if (arr[i] > max) {
-
- max = arr[i];
-
- }
-
- }
-
- return max;
-
- }
-
-
-
- // 逆置数组
-
- void reverseArray(int *arr, int length) {
-
- for (int i = 0; i < length / 2; i++) {
-
- int temp = arr[i];
-
- arr[i] = arr[length - 1 - i];
-
- arr[length - 1 - i] = temp;
-
- }
-
- }
课外作业:
1. 自定义函数(my_strlen)实现strlen函数的功能
解析:
- #include
- #include
- #define MAX 50
- void my_strlen(char *a,int count){
- printf("请输入字符串:");
- gets(a);
- while (*a++)
- {
- count++;
- }
- printf("长度为%d\n",count);
- }
-
- int main(int argc, char const *argv[])
- {
- char str[MAX]="";
- char s[MAX]="";
- int count=0;
- my_strlen(str,count);
- return 0;
- }
2. 自定义函数(my_strcpy)实现strcpy函数的功能
解析:
- #include
- #include
- #define MAX 50
-
- void my_strcpy(char *a,const char *b){
-
- while (*b != '\0')
- {
- *a=*b; //将b里的值写入a
- a++;
- b++;
- }
- *a='\0'; //‘\0’写入a
-
- }
- int main(int argc, char const *argv[])
- {
- char str[MAX]="";
- char s[MAX]="";
- int count=0;
- printf("请输入第一个字符串内容");
- gets(str);
- printf("请输入第二个字符串内容");
- gets(s);
- my_strcpy(str,s); //调用函数
- printf("str=%s\t,s=%s\t",str,s);
- return 0;
- }
3.自定义函数(my_strcmp)实现strcmp函数的功能
解析:
- #include
- #include
- #define MAX 50
-
- int my_strcmp(const char *a,const char *b){
- int len = sizeof(*b)/sizeof(char);
- while (*a && *b)
- {
- a++;
- b++;
- }
- return (char) *a -(char) *b;
- }
- int main(int argc, char const *argv[])
- {
- char str[MAX]="";
- char s[MAX]="";
- int count=0;
- printf("请输入第一个字符串内容");
- gets(str);
- printf("请输入第二个字符串内容");
- gets(s);
- int sum = my_strcmp(str,s);
- if(sum ==0){
- printf("相等");
- }else if (sum <0)
- {
- printf("第二个字符串内容大");
- }else
- {
- printf("第一个字符串内容大");
- }
-
-
- return 0;
- }
4.自定义函数(my_strcat)实现strcat函数的功能
解析:
- #include
- #include
- #define MAX 50
-
- void my_strcat(char *a,const char *b){
-
- while (*a != '\0')
- {
- a++;
- }
- while (*b != '\0')
- {
- *a++ = *b++;
- }
- *a = '\0';
- }
- int main(int argc, char const *argv[])
- {
- char str[MAX]="";
- char s[MAX]="";
- int count=0;
- printf("请输入第一个字符串内容");
- gets(str);
- printf("请输入第二个字符串内容");
- gets(s);
- my_strcat(str,s);
- printf("str=%s\n",str);
- return 0;
- }
5.自定义函数(my_strstr)实现求src字符串中是否包含子串dest字符串
解析:
- #include
-
- // 自定义函数 my_strstr,实现 strstr 函数的功能
- char my_strstr(const char *src, const char *dest) {
- int src_len = 0, dest_len = 0;
- const char *src_ptr, *dest_ptr;
-
- // 计算 dest 字符串的长度
- while (dest[dest_len] != '\0') {
- dest_len++;
- }
-
- // 遍历 src 字符串
- for (src_ptr = src; *src_ptr != '\0'; src_ptr++) {
- // 如果当前字符匹配 dest 的第一个字符
- if (*src_ptr == *dest) {
- int i = 0;
-
- // 检查 dest 是否完全匹配
- for (i = 0; i < dest_len; i++) {
- // 如果字符不匹配或到达 src 的末尾,则跳出循环
- if (src_ptr[i] != dest[i] || src_ptr[i] == '\0') {
- break;
- }
- }
-
- // 如果完全匹配,返回1
- if (i == dest_len) {
- return 1;
- }
- }
- }
-
- // 如果没有找到 dest,返回 0
- return 0;
- }
-
- int main() {
- char str[50]="";
- char s[50]="";
- printf("请输入第一个字符串内容");
- gets(str);
- printf("请输入第二个字符串内容");
- gets(s);
-
- // 使用自定义函数查找子串
- char found = my_strstr(str, s);
-
- if (found != 0) {
- printf("找到子串\n" );
- } else {
- printf("子串未找到。\n");
- }
-
- return 0;
- }
-
相关阅读:
一个可见又不可见的窗口
AI智能机器人的语音识别是如何实现的 ?
740 · 零钱兑换 2
京东云开发者|探寻软件架构的本质,到底什么是架构?
Linux权限的认识
Java开发备战 - JavaSe(基础篇)
Spark SQL_第六章笔记
Java 之 ElasticSearch8.x.x 【一篇文章精通系列】【ES的基本操作,ES安装,ES head + Kibana】
【网络】把路由器用作交换机的方案
LLM面面观之LLM复读机问题及解决方案
-
原文地址:https://blog.csdn.net/weixin_50357983/article/details/140375371