当前位置: 首页 > wzjs >正文

制作图网 专业图片在线制作网站百度营销平台

制作图网 专业图片在线制作网站,百度营销平台,个人可以开通微商城吗,网上做任务佣金高的网站文章目录 前言 一、字符指针变量二、数组指针变量2.1 数组指针变量是什么2.2 数组指针变量怎么初始化2.2.1 静态初始化2.2.2 动态初始化 三、二维数组传参的本质四、函数指针变量4.1 函数指针变量的创建4.2 函数指针变量的使用4.3 typedef关键字4.4拓展 五、函数指针数组六、转…

文章目录

      • 前言
    • 一、字符指针变量
    • 二、数组指针变量
      • 2.1 数组指针变量是什么
      • 2.2 数组指针变量怎么初始化
        • 2.2.1 静态初始化
        • 2.2.2 动态初始化
    • 三、二维数组传参的本质
    • 四、函数指针变量
      • 4.1 函数指针变量的创建
      • 4.2 函数指针变量的使用
      • 4.3 typedef关键字
      • 4.4拓展
    • 五、函数指针数组
    • 六、转移表
    • 总结

前言

在C语言中,指针一直是一个让初学者头疼的话题。它看似复杂难懂,但其实只要掌握了正确的方法,就能轻松驾驭。在之前的两篇博客中,我们已经对指针有了初步的认识。今天,我们将继续深入探索指针的更多奥秘。
在这里插入图片描述

一、字符指针变量

字符指针变量是用来存储字符数组(字符串)首地址的变量。它的声明方式是char *指针变量名;。例如:

char *str = "Hello, World!";

这里,str就是一个字符指针变量,它指向了字符串"Hello, World!"的首地址。通过字符指针变量,我们可以对字符串进行操作。比如,printf("%s", str);就可以输出整个字符串。

二、数组指针变量

2.1 数组指针变量是什么

数组指针变量是用来存储数组首地址的变量。它的声明方式是类型 (*指针变量名)[数组长度];。例如:

int arr[5] = {1, 2, 3, 4, 5};
int (*p)[5] = &arr;

这里,p就是一个指向包含5个整数的数组的指针变量。它指向了数组arr的首地址。通过数组指针变量,我们可以访问数组中的元素。比如,printf("%d", (*p)[2]);就可以输出数组中的第三个元素3。

数组指针变量与普通指针变量的区别在于,数组指针变量指向的是一个数组,而普通指针变量指向的是一个单一的变量或一个字符串。数组指针变量在内存中占用的空间比普通指针变量大,因为它需要存储整个数组的地址信息。

2.2 数组指针变量怎么初始化

数组指针变量的初始化可以通过以下两种方式:

2.2.1 静态初始化

在声明数组指针变量时,直接将其初始化为一个已知数组的地址。例如:

int arr[5] = {1, 2, 3, 4, 5};
int (*p)[5] = &arr;

这里,p被初始化为指向数组arr的首地址。

2.2.2 动态初始化

在程序运行过程中,通过malloc函数动态分配一个数组,并将数组指针变量初始化为分配的内存地址。例如:

int (*p)[5] = (int (*)[5])malloc(sizeof(int) * 5);
if (p == NULL) {printf("Memory allocation failed\n");exit(1);
}
for (int i = 0; i < 5; i++) {(*p)[i] = i + 1;
}

这里,p被动态分配了一个包含5个整数的数组,并通过循环初始化了数组中的元素。

三、二维数组传参的本质

在C语言中,当我们把二维数组作为参数传递给函数时,实际上传递的是数组首地址。函数接收的是一个指向一维数组的指针。例如:

void printArray(int arr[][3], int rows) {for (int i = 0; i < rows; i++) {for (int j = 0; j < 3; j++) {printf("%d ", arr[i][j]);}printf("\n");}
}

这里,arr是一个指向包含3个整数的一维数组的指针。通过这种方式,我们可以在函数中操作二维数组。

四、函数指针变量

4.1 函数指针变量的创建

函数指针变量是用来存储函数地址的变量。它的声明方式是返回类型 (*指针变量名)(参数列表);。例如:

int add(int a, int b) {return a + b;
}int (*funcPtr)(int, int) = add;

这里,funcPtr就是一个指向add函数的指针变量。通过函数指针变量,我们可以调用函数。比如,printf("%d", (*funcPtr)(1, 2));就可以输出3。

4.2 函数指针变量的使用

函数指针变量的使用非常灵活,可以用于多种场景。例如,我们可以根据不同的条件调用不同的函数:

int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }int (*funcPtr)(int, int);int choice;
printf("Enter your choice (1 for add, 2 for sub): ");
scanf("%d", &choice);if (choice == 1) {funcPtr = add;
} else if (choice == 2) {funcPtr = sub;
} else {printf("Invalid choice\n");return 1;
}printf("%d\n", (*funcPtr)(5, 3));

这里,根据用户输入的选择,程序会调用addsub函数。

4.3 typedef关键字

typedef关键字可以用来为数据类型定义一个别名,包括函数指针类型。例如:

typedef int (*FuncPtr)(int, int);FuncPtr funcPtr = add;

这里,FuncPtrint (*funcPtr)(int, int)的别名。通过typedef,我们可以简化函数指针的声明,使代码更加清晰易读。

4.4拓展

两段来自《C陷阱和缺陷》有趣的代码

五、函数指针数组

函数指针数组是一个数组,其元素都是函数指针。它的声明方式是返回类型 (*指针数组名[数组长度])(参数列表);。例如:

int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }
int mul(int a, int b) { return a * b; }
int div(int a, int b) { return a / b; }int (*funcPtrArr[4])(int, int) = {add, sub, mul, div};

这里,funcPtrArr就是一个包含4个函数指针的数组。通过函数指针数组,我们可以根据不同的条件调用不同的函数。比如:

for (int i = 0; i < 4; i++) {printf("%d ", (*funcPtrArr[i])(4, 2));
}

输出结果为6 2 8 2。

六、转移表

转移表是一种利用函数指针数组实现的控制结构。它根据不同的输入条件,选择执行不同的函数。例如,在一个简单的菜单系统中,我们可以使用转移表来实现不同的功能选项:

void option1() { printf("Option 1\n"); }
void option2() { printf("Option 2\n"); }
void option3() { printf("Option 3\n"); }void (*transferTable[3])() = {option1, option2, option3};int choice;
printf("Enter your choice (1-3): ");
scanf("%d", &choice);if (choice >= 1 && choice <= 3) {transferTable[choice - 1]();
} else {printf("Invalid choice\n");
}

这里,根据用户输入的选择,程序会调用对应的函数。

总结

通过本篇博客的学习,我们深入理解了字符指针变量、数组指针变量、二维数组传参的本质、函数指针变量、函数指针数组以及转移表等指针的高级应用。指针是C语言中非常强大的工具,它能让我们的程序更加灵活和高效。希望读者能够通过不断地实践和思考,真正掌握指针的精髓。

http://www.dtcms.com/wzjs/208732.html

相关文章:

  • 网站开发联系人国强百度搜索开放平台
  • 高度重视局门户网站建设百度广告电话号码
  • 网站 一般 用什么空间美工培训
  • pbootcms模板免费下载seo搜索是什么
  • 手机网站用什么软件做的自助建站系统开发
  • 中山做百度网站的公司名称百度关键词热度
  • 网站做好后网络营销课程培训课程
  • 护肤品网站建设需求分析广告公司名字
  • 蓝海网站建设热点新闻事件及评论
  • 提供中山精品网站建设网站制作代码
  • 山东省住房建设厅网站安全处个人对网络营销的看法
  • 国外网站做淘宝客茂名百度seo公司
  • 中小微企业名录库查询落实好疫情防控优化措施
  • 广西营销型网站建设公司媒体资源
  • 汕头网站建设推广费用最近一周的重大热点新闻
  • 做720效果的还有哪个网站外包公司软件开发
  • 个性化网站建设开发惠州seo计费管理
  • 深圳网站建设与网站制作怎么建立网站
  • 网站建设及推广衬胶蝶阀一个好的产品怎么推广
  • iis做外网站点免费换友情链接
  • 网站建设连接数据库北京百度公司总部电话
  • 免费发布信息网站大全 无数量限制北京seo服务销售
  • 做网站需要注册商标是几类专业培训心得体会
  • 深圳企业网站建设维护qq推广官网
  • 创想ECS网站建设服务百度搜索网页版入口
  • wordpress 全宽页面搜索优化推广公司
  • soho怎么做网站百度一下你就知道官网首页
  • b站推广网站入口2022免费b站推广网站下载
  • windows 2003做网站百度资源站长平台
  • 单页关键字优化seo教学实体培训班