| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 609 人关注过本帖
标题:函数指针数组声明的疑惑
只看楼主 加入收藏
aneeg
Rank: 1
等 级:新手上路
帖 子:75
专家分:8
注 册:2014-4-10
结帖率:86.67%
收藏
 问题点数:0 回复次数:10 
函数指针数组声明的疑惑
为什么void str(char *strings[])这种声明是合法的,而char *string[]就是非法的
2015-02-08 17:03
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
第一个声明是声明一个函数,函数形参是char型指针,第二个什么都不是,若是声明char型指针不用加中括号,若是声明指向二维数组的指针还需要一个中括号来指明维数,若是声明指向一维数组的指针用数组名即可。

一片落叶掉进了回忆的流年。
2015-02-08 18:00
aneeg
Rank: 1
等 级:新手上路
帖 子:75
专家分:8
注 册:2014-4-10
收藏
得分:0 
回复 2楼 诸葛欧阳
第二个是想声明一个数组,元素是char型指针
2015-02-08 18:41
lovegh
Rank: 5Rank: 5
来 自:图灵学院
等 级:职业侠客
威 望:3
帖 子:117
专家分:311
注 册:2015-1-23
收藏
得分:0 
回复 3楼 aneeg
你只是声明没有给数组赋值吧,比如
程序代码:
#include <stdio.h>

int main() {

    char * string[] = {"a", "b"};
    printf("str1 = %s\n", string[0]);
    return 0;
}

别老是写代码,要多陪妹子,多了解老婆大人,血淋淋的教训。
2015-02-08 18:46
lovegh
Rank: 5Rank: 5
来 自:图灵学院
等 级:职业侠客
威 望:3
帖 子:117
专家分:311
注 册:2015-1-23
收藏
得分:0 
回复 3楼 aneeg
说得不够准确,应该说是初始化。

别老是写代码,要多陪妹子,多了解老婆大人,血淋淋的教训。
2015-02-08 18:51
aneeg
Rank: 1
等 级:新手上路
帖 子:75
专家分:8
注 册:2014-4-10
收藏
得分:0 
回复 5楼 lovegh
可第一个也没初始化啊
2015-02-08 18:54
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
数组作为函数参数 实际是退化为指针了 所以 数组传递给函数实际上就是个指针 这里的维数也就不重要了

二维及高维数组是另外一回事 如果不指定低维的大小没法寻址

我的理解
2015-02-08 22:47
aneeg
Rank: 1
等 级:新手上路
帖 子:75
专家分:8
注 册:2014-4-10
收藏
得分:0 
回复 7楼 zklhp
退化为指针是不是可以理解成,在函数原型处声明时,不管有多少维,都只分配一个地址的空间用来存首地址,都可以用空的方括号表示?二维数组在声明时又是怎么分配空间的,头疼
2015-02-08 23:36
lovegh
Rank: 5Rank: 5
来 自:图灵学院
等 级:职业侠客
威 望:3
帖 子:117
专家分:311
注 册:2015-1-23
收藏
得分:0 
回复 8楼 aneeg
void str(char *strings[]) --------  等价于 void str(char **strings)
就算你写成void str(char * strings[1000000000])   -------- 编译器方式给你变成 void str(char ** strings);这是对于函数来说,原因正如zklhp大大说的那样。
-------------------------------------------------------------------------华丽的装逼分界线----------------------------------------------------------------------------------------------
但是如果你在函数中声明char* strings[],必须告诉编译器你要的大小,不然编译器不知道你要的是多大,如果你写成char * strings[] = {"a", "b"};编译器会给你自动计算这个数组的大小。
数组和指针是可以混用,但是是有本质区别的,在函数里声明的本质就是指针,那样写只是为了好理解,C的语法糖。

别老是写代码,要多陪妹子,多了解老婆大人,血淋淋的教训。
2015-02-09 00:12
lovegh
Rank: 5Rank: 5
来 自:图灵学院
等 级:职业侠客
威 望:3
帖 子:117
专家分:311
注 册:2015-1-23
收藏
得分:0 
回复 8楼 aneeg
我这边的函数中指的是在例如
main() {
......
}
函数里面。 而函数里声明值的是声明函数是所带的形参,说得有点不清楚,见谅。

别老是写代码,要多陪妹子,多了解老婆大人,血淋淋的教训。
2015-02-09 00:18
快速回复:函数指针数组声明的疑惑
数据加载中...
 
   



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

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