啊涂涂 发表于 2018-9-23 21:43:43

指针数组

float *target = {
                  {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语言为什么不能这样定义一个数组?

求各位大佬详细解答

claws0n 发表于 2018-9-23 21:50:36

汗………………跟你过说了是跨度的问题。另外,指针不能当作数组使用在存储资料上。

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

指针只能够参考一个对象 *p = &a; 即使是 (*p) = &b; p 也是指向首地址,只是跨度不一样而已。

人造人 发表于 2018-9-23 21:53:05

定义三个指针,分别指向这三行数据
是这个意思吗?

#include <stdio.h>

int main(void)
{
        double data[] =
        {
                {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) = &data;
        double (*p2) = &data;
        double (*p3) = &data;

        return 0;
}

人造人 发表于 2018-9-23 21:56:06

#include <stdio.h>

int main(void)
{
        double data[] =
        {
                {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[]) = {&data, &data, &data};

        return 0;
}

人造人 发表于 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[]) = {&d1, &d2, &d3};

        return 0;
}

人造人 发表于 2018-9-23 21:58:39

你要的是哪一个?
都不是?
详细描述一下你的题目

啊涂涂 发表于 2018-9-24 07:33:32

人造人 发表于 2018-9-23 21:58
你要的是哪一个?
都不是?
详细描述一下你的题目

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

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

所以我就衍生出来了一个我那样的写法

啊涂涂 发表于 2018-9-24 07:35:56

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

float *target;...

那小甲鱼写的

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

这个为什么可以呢

人造人 发表于 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;
        char CH = "ABCD";
       
        printf("%c - %c\n", ch, CH);
        return 0;
}

longff9009 发表于 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,也不会在引用时自动跳转,如果要引用下一个需要手动让指针跳转。

啊涂涂 发表于 2018-9-24 11:00:25

非常感谢帮助的每一位鱼油,祝大家天天开心{:10_264:}

啊涂涂 发表于 2018-9-24 11:09:19

人造人 发表于 2018-9-24 10:10
这种写法只针对字符串,因为字符串比较特殊,字符串是地址

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

程序后半段没看懂...

人造人 发表于 2018-9-24 11:33:29

啊涂涂 发表于 2018-9-24 11:09
void还没学到,不知道是什么东西....

程序后半段没看懂...

那就去掉void

#include <stdio.h>

int main()
{
      char *str = "abcd";
      char ch = str;
      char CH = "ABCD";
      
      printf("%c - %c\n", ch, CH);
      return 0;
}

野渡1 发表于 2018-9-24 18:38:03

啊涂涂 发表于 2018-9-24 07:35
那小甲鱼写的

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


这个是字符串吧,字符串可以这样
页: [1]
查看完整版本: 指针数组