鱼C论坛

 找回密码
 立即注册
查看: 1876|回复: 13

[已解决]指针数组

[复制链接]
发表于 2018-9-23 21:43:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
float *target[3] = {
                  {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 31.3, 35.5, 58.7, 49.6, 55.5},
                  {59.8, 54.9, 33.1, 38.2, 26.6, 20.5, 27.8, 38.5, 41.5, 44.7, 38.1, 41.5},
                  {34.9, 36.4, 47.5, 37.9, 30.6, 23.4, 26.6, 34.3, 0.0, 0.0, 0.0, 0.0}
};

我的本意是定义三个指针,分别指向这三行数据,运行就报错

C语言为什么不能这样定义一个数组?

求各位大佬详细解答
最佳答案
2018-9-24 11:33:29
啊涂涂 发表于 2018-9-24 11:09
void还没学到,不知道是什么东西....

程序后半段没看懂...

那就去掉void
#include <stdio.h>

int main()
{
        char *str = "abcd";
        char ch = str[3];
        char CH = "ABCD"[3];
        
        printf("%c - %c\n", ch, CH);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-23 21:50:36 | 显示全部楼层
汗………………跟你过说了是跨度的问题。另外,指针不能当作数组使用在存储资料上。

float *target[3]; //是指这个数组有三个元素,每个元素是参考浮点数的指针

指针只能够参考一个对象 *p = &a; 即使是 (*p)[10] = &b; p 也是指向首地址,只是跨度不一样而已。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-9-23 21:53:05 | 显示全部楼层
定义三个指针,分别指向这三行数据
是这个意思吗?
#include <stdio.h>

int main(void)
{
        double data[][12] =
        {
                {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 31.3, 35.5, 58.7, 49.6, 55.5},
                {59.8, 54.9, 33.1, 38.2, 26.6, 20.5, 27.8, 38.5, 41.5, 44.7, 38.1, 41.5},
                {34.9, 36.4, 47.5, 37.9, 30.6, 23.4, 26.6, 34.3, 0.0, 0.0, 0.0, 0.0}
        };
        double (*p1)[12] = &data[0];
        double (*p2)[12] = &data[1];
        double (*p3)[12] = &data[2];

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-23 21:56:06 | 显示全部楼层
#include <stdio.h>

int main(void)
{
        double data[][12] =
        {
                {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 31.3, 35.5, 58.7, 49.6, 55.5},
                {59.8, 54.9, 33.1, 38.2, 26.6, 20.5, 27.8, 38.5, 41.5, 44.7, 38.1, 41.5},
                {34.9, 36.4, 47.5, 37.9, 30.6, 23.4, 26.6, 34.3, 0.0, 0.0, 0.0, 0.0}
        };
        
        double (*p[])[12] = {&data[0], &data[1], &data[2]};

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-23 21:57:47 | 显示全部楼层
#include <stdio.h>

int main(void)
{
        double d1[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 31.3, 35.5, 58.7, 49.6, 55.5};
        double d2[] = {59.8, 54.9, 33.1, 38.2, 26.6, 20.5, 27.8, 38.5, 41.5, 44.7, 38.1, 41.5};
        double d3[] = {34.9, 36.4, 47.5, 37.9, 30.6, 23.4, 26.6, 34.3, 0.0, 0.0, 0.0, 0.0};
        
        double (*p[])[12] = {&d1, &d2, &d3};

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-23 21:58:39 | 显示全部楼层
你要的是哪一个?
都不是?
详细描述一下你的题目
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-24 07:33:32 | 显示全部楼层
人造人 发表于 2018-9-23 21:58
你要的是哪一个?
都不是?
详细描述一下你的题目

不是不是,就是我写的那个。我看小甲鱼有写成

char *array【5】 = {“Fishc”, “Five”, “Star”, “Good”, “Wow”}

所以我就衍生出来了一个我那样的写法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-24 07:35:56 | 显示全部楼层
claws0n 发表于 2018-9-23 21:50
汗………………跟你过说了是跨度的问题。另外,指针不能当作数组使用在存储资料上。

float *target[3];  ...

那小甲鱼写的

char *array【5】 = {“FishC”, “Five”, “Star”, “Good”, “Wow”}

这个为什么可以呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-24 10:10:20 | 显示全部楼层
啊涂涂 发表于 2018-9-24 07:33
不是不是,就是我写的那个。我看小甲鱼有写成

char *array【5】 = {“Fishc”, “Five”, “Star” ...

这种写法只针对字符串,因为字符串比较特殊,字符串是地址
#include <stdio.h>

int main(void)
{
        char *str = "abcd";
        char ch = str[3];
        char CH = "ABCD"[3];
        
        printf("%c - %c\n", ch, CH);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-24 10:41:39 | 显示全部楼层
本帖最后由 longff9009 于 2018-9-24 11:04 编辑
啊涂涂 发表于 2018-9-24 07:35
那小甲鱼写的

char *array【5】 = {“FishC”, “Five”, “Star”, “Good”, “Wow”}


1、C语言里用字符指针处理字符串的特殊处理机制啦,    char *a="FishC";这里的"FishC"是一个字符串常量,C语言会在内存中开辟一个字符数组用来存储这个常量,但这个数组本身是没有名字的,无法通过数组名来引用,只能通过指针变量来引用,实际是将这个字符串第1个元素的首地址赋给指针a。a是char类型,如果prinf("%c",a),从第1个字符开始,指针a每次向后跳转1个char的长度输出下一个字符,直到遇到'\0'为止。
2、通过1个字符指针来<引用>1个字符数组,注意,只是“引用”它进行输入输出,并不是让它指向整个字符数组了,实际它指向的还是只有1个字符(不是整个字符数组),跨度还是只有1个char,只是在输出时,它会自动跳转直到将整个字符数组输出完。而对于1个int 指针,其跨度是1个int,自然不能用来指向1整个int数组了,1次只能指向其中1个int,也不会在引用时自动跳转,如果要引用下一个需要手动让指针跳转。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-24 11:00:25 | 显示全部楼层
非常感谢帮助的每一位鱼油,祝大家天天开心
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-24 11:09:19 | 显示全部楼层
人造人 发表于 2018-9-24 10:10
这种写法只针对字符串,因为字符串比较特殊,字符串是地址

void还没学到,不知道是什么东西....

程序后半段没看懂...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-24 11:33:29 | 显示全部楼层    本楼为最佳答案   
啊涂涂 发表于 2018-9-24 11:09
void还没学到,不知道是什么东西....

程序后半段没看懂...

那就去掉void
#include <stdio.h>

int main()
{
        char *str = "abcd";
        char ch = str[3];
        char CH = "ABCD"[3];
        
        printf("%c - %c\n", ch, CH);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-9-24 18:38:03 | 显示全部楼层
啊涂涂 发表于 2018-9-24 07:35
那小甲鱼写的

char *array【5】 = {“FishC”, “Five”, “Star”, “Good”, “Wow”}

这个是字符串吧,字符串可以这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-30 10:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表