前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >指针与数组和函数的几个关系

指针与数组和函数的几个关系

作者头像
用户2929716
发布2018-08-23 13:10:56
4270
发布2018-08-23 13:10:56
举报
文章被收录于专栏:流媒体流媒体

指针数组、数组指针

  • 指针数组。数组的元素类型是指针 如:int* a[4]
  • 数组指针。指向数组的指针变量 如:int (*a)[4];
代码语言:javascript
复制
int main() {
    int a[4] = {1, 2, 3, 4};
    //指针数组
    int *b[4];
    //数组指针
    int (*c)[4];
    c = &a;
    for (int i = 0; i < 4; i++) {
        b[i] = &a[i];
    }
    printf("%d,%d", *b[1], c[0][1]);
}

定义了数组指针,该指针指向这个数组的首地址,必须给指针指定一个地址,容易犯的错得就是,不给b地址,直接用(b)[i]=c[i]给数组b中元素赋值,这时数组指针不知道指向哪里,调试时可能没错,但运行时肯定出现问题,使用指针时要注意这个问题。但为什么a就不用给他地址呢,a的元素是指针,实际上for循环内已经给数组a中元素指定地址了。但若在for循环内写a[i]=c[i],这同样会出问题。

指针函数、函数指针

  • 指针函数 一个返回值为指针的函数,本质是一个函数。 //指针函数 char *reverse(char *); int main() { char s[100] = "abc"; char *res = reverse(s); if (res != NULL) printf("%s", res); } //字符串逆转,指针函数 char *reverse(char *p) { if (p == NULL) { return NULL; } int count = 0; char *k = p; while (*k++) { count++; } char *start = p; char *end = p + count - 1; for (int i = 0; i < count / 2; i++) { char temp = *start; *start = *end; *end = temp; start++; end--; } return p; }
  • 函数指针 指向函数的指针变量,本质是一个指针。 将上面的代码进行一些修改,使用函数指针来执行。 int main() { char s[100] = "abc"; // char *res = reverse(s); // if (res != NULL) // printf("%s", res); // 声明函数指针 char *(*funcPointer)(char *); funcPointer = reverse; char *res = funcPointer(s); if (res != NULL) printf("%s", res); } ​
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.07.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 指针数组、数组指针
  • 指针函数、函数指针
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档