晓晓坤 发表于 2021-2-2 12:27:26

C语言带你飞视频p23指针数组疑问

这个视频中的这个指针数组没看懂,这个里面给*pl【5】赋值,这个我理解是给一个数组地址赋值,这个视频中这个代码的指针没看到赋值地址,那么只有指针地址,没明白这个数组中指针的意义在哪。

伪文青 发表于 2021-2-2 14:02:04

我早上刚看到这儿,也没看懂,至今为止感觉数组和指针差不多是一个东西???但是小甲鱼说这俩不一样。。

晓晓坤 发表于 2021-2-2 14:28:39

指针毕竟是指针·得有个被指向的东西吧,我觉得所产生作用的对象还是要以地址为主·上面这个视频写的我就迷糊了·始终不明白字符串到底存在了哪里··数组像是固定的指针空间,结构比较固定·像是个指针做出来的产物·

风过无痕1989 发表于 2021-2-2 14:49:34

*pl 定义的是一个指针数组,其元素值都是指针,分别指向 5 个字符数组的首地址

晓晓坤 发表于 2021-2-2 15:07:37

风过无痕1989 发表于 2021-2-2 14:49
*pl 定义的是一个指针数组,其元素值都是指针,分别指向 5 个字符数组的首地址

所指向的字符数组首地址不需要提前定义?直接赋值么?主要是你说的这个所指向的字符数组首地址在哪··你的意思是否是说视频中被赋值的5个字符串是指针地址的名字?字符串里面还有一个会被赋值的地址?然而上面这个式子还没有给指针数组赋值?

风过无痕1989 发表于 2021-2-2 15:42:02

晓晓坤 发表于 2021-2-2 15:07
所指向的字符数组首地址不需要提前定义?直接赋值么?主要是你说的这个所指向的字符数组首地址在哪··你 ...

定义了指针数组,系统会自动分配,无须你再定义
#include <stdio.h>
int main()
{
        char *pl = {
        "让编程改变世界 -- 鱼C工作室",
        "Just do it -- NIKE",
        "一切皆有可能 -- 李宁",
        "水不止步 -- 安踏",
        "one more thing... -- 苹果"
        };
        int i;
       
        for (i = 0;i < 5;i++)
        {
                printf("%d\t", pl);    //输出指针指向的地址
                printf("%s\n", pl);
        }

    return 0;
}

晓晓坤 发表于 2021-2-2 17:20:47

风过无痕1989 发表于 2021-2-2 15:42
定义了指针数组,系统会自动分配,无须你再定义

你好!你的意思是说系统还是自动分配了指针地址和字符串地址两个,还是只有一个地址呢·是否像普通指针变量一样先有个普通的变量名·然后再有指针指向变量名·还是说这个指针就直接指向一个内存中系统分配的地址呢?

Minecraft程序猿 发表于 2021-2-2 17:52:59

这是个指针数组,char *是字符指针,是
C语言中字符串的实现方式,这个意思就是创建一个数组,存储一些字符串(字符指针)

Minecraft程序猿 发表于 2021-2-2 17:53:35

风过无痕1989 发表于 2021-2-2 14:49
*pl 定义的是一个指针数组,其元素值都是指针,分别指向 5 个字符数组的首地址

字符指针

风过无痕1989 发表于 2021-2-2 23:31:36

晓晓坤 发表于 2021-2-2 17:20
你好!你的意思是说系统还是自动分配了指针地址和字符串地址两个,还是只有一个地址呢·是否像普通指针变 ...

什么叫“还是”?什么叫“两个”?什么叫“还是只有一个地址”?这里有5个字符串,一个字符串,又有多个字符,而每一个字符,就占一个数组元素,也就是一个地址

晓晓坤 发表于 2021-2-3 10:40:07

风过无痕1989 发表于 2021-2-2 23:31
什么叫“还是”?什么叫“两个”?什么叫“还是只有一个地址”?这里有5个字符串,一个字符串,又有多个 ...

字符串是多个数组元素,多个地址这个我知道,我的问题并不是这个·只是学到了数组指针这里,我的理解是指针地址存元素地址,加*号指向元素地址,字符串数组是多个元素地址,但是是否每个元素地址都有一个指针地址储存的问题。还是没搞明白·

晓晓坤 发表于 2021-2-3 10:43:07

晓晓坤 发表于 2021-2-3 10:40
字符串是多个数组元素,多个地址这个我知道,我的问题并不是这个·只是学到了数组指针这里,我的理解是指 ...

还是意思是说这个指针数组里面的每个元素都还是指针名,视频中的这些并没有给这些指针赋值地址呢。

晓晓坤 发表于 2021-2-3 10:55:55

晓晓坤 发表于 2021-2-3 10:43
还是意思是说这个指针数组里面的每个元素都还是指针名,视频中的这些并没有给这些指针赋值地址呢。

你的答案中我现在理解的就是pl【5】中存放着5个地址,是5个字符串的首个元素的地址。系统自动定义了这个5个字符串的位置,不需要提前定义,直接赋值。不知道我到底有没有搞懂是不是这么回事·

风过无痕1989 发表于 2021-2-3 16:26:38

晓晓坤 发表于 2021-2-3 10:43
还是意思是说这个指针数组里面的每个元素都还是指针名,视频中的这些并没有给这些指针赋值地址呢。

指针数组里,每个元素都是指针(或者说是地址),它们分别指向5个字符串的首地址

风过无痕1989 发表于 2021-2-3 16:41:35

晓晓坤 发表于 2021-2-3 10:55
你的答案中我现在理解的就是pl【5】中存放着5个地址,是5个字符串的首个元素的地址。系统自动定义了这个5 ...

我想你是在纠结,这5个字符串数组的数组名吧?其实知道了这5个字符串数组的首地址,其数组有没有数组名对于编译器来说无关紧要,因为编译器在处理时并不需要数组名,而写出这个数组名是给程序人员看的,不是给编译器看的。编译器只须知道什么时候开始(首地址),什么时候结束(结束符或其他结束标志)即可

晓晓坤 发表于 2021-2-3 17:31:55

风过无痕1989 发表于 2021-2-3 16:41
我想你是在纠结,这5个字符串数组的数组名吧?其实知道了这5个字符串数组的首地址,其数组有没有数组名对 ...

谢谢!麻烦了还给了图,基本上能理解这个指针数组的逻辑,我再去研究研究他跟普通字符串数组有啥不一样,谢谢!
页: [1]
查看完整版本: C语言带你飞视频p23指针数组疑问