| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4306 人关注过本帖
标题:指针,这里不太懂,有哪位大佬说下吗?
只看楼主 加入收藏
lan797597
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2020-4-23
结帖率:75%
收藏
 问题点数:0 回复次数:22 
指针,这里不太懂,有哪位大佬说下吗?
#include <stdio.h>

void f(int * pArr, int len)

int main(void)
{
    int a[5]={1, 2, 3, 4, 5};
    int b[6]={-1, -2, -3, 4, 5, -6};
    int c[100]={1, 99, 22, 33};

    f(a,5);
   
    return 0;
}

f(a,5) a  为什么是int * 类型的?
搜索更多相关主题的帖子: return void 指针 int 类型 
2020-07-03 10:19
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
类型转换

https://zh.
2020-07-03 10:20
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
将数组名当指针来表达了
严谨的表达:f(&a[0],5)
2020-07-03 11:19
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
以下是引用吹水佬在2020-7-3 11:19:21的发言:

将数组名当指针来表达了
严谨的表达:f(&a[0],5)

数组名a在这里会隐式转换为指针
都是严谨的表达

https://zh.
2020-07-03 11:23
fulltimelink
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:171
专家分:752
注 册:2020-4-1
收藏
得分:0 
cppreference上有个array-to-pointer的说明

Array-to-pointer decay
There is an implicit conversion from lvalues and rvalues of array type to rvalues of pointer type: it constructs a pointer to the first element of an array. This conversion is used whenever arrays appear in context where arrays are not expected, but pointers are:
程序代码:
void g(int (&a)[3])
{
    std::cout << a[0] << '\n';
}

 
void f(int* p)
{
    std::cout << *p << '\n';
}

程序代码:

    int a[3] = {1, 2, 3};
    int* p = a;
    ...
    // where arrays are acceptable, but pointers aren't, only arrays may be used
    g(a); // okay: function takes an array by reference
    //  g(p); // error
    ...
    // where pointers are acceptable, but arrays aren't, both may be used:
    f(a); // okay: function takes a pointer
    f(p); // okay: function takes a pointer
2020-07-03 13:58
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用lin5161678在2020-7-3 11:23:51的发言:


数组名a在这里会隐式转换为指针
都是严谨的表达

所谓的“隐式转换”不是语言表达方式,也许可以说是某些编译器的行为。
如下的表达不可以说都是一样的吧?
void f(int a[], int len)
void f(int &a, int len)
void f(int *a, int len)
2020-07-03 14:43
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
以下是引用吹水佬在2020-7-3 14:43:49的发言:


所谓的“隐式转换”不是语言表达方式,也许可以说是某些编译器的行为。
如下的表达不可以说都是一样的吧?
void f(int a[], int len)
void f(int &a, int len)
void f(int *a, int len)

1 3 完全一样
并且和类型转换没有关系
是函数原型作用域的特殊要求

2是另一回事

https://zh.
2020-07-03 14:45
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
个人觉得,C语言的表达方式本身就不是很严谨。
编程不但与机器交流,也与人交流,如果表达不严谨,就会出现象楼主“这里不太懂”的情况。
2020-07-03 14:56
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
以下是引用吹水佬在2020-7-3 14:56:06的发言:

个人觉得,C语言的表达方式本身就不是很严谨。
编程不但与机器交流,也与人交流,如果表达不严谨,就会出现象楼主“这里不太懂”的情况。

写a 和 写&a[0]
都不存在交流障碍的问题
如果存在
那么更多的是
读不懂的人需要提高
而不是需要迁就

https://zh.
2020-07-03 14:59
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏(1)
得分:0 
以下是引用lin5161678在2020-7-3 14:45:52的发言:


1 3 完全一样
并且和类型转换没有关系
是函数原型作用域的特殊要求

2是另一回事

void f(int a[], int len)
void f(int *a, int len)
这两句的表达意思是一样吗?
int a[]
int *a
这两句的表达意思是也一样吗?

2020-07-03 15:02
快速回复:指针,这里不太懂,有哪位大佬说下吗?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033716 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved