鱼C论坛

 找回密码
 立即注册
查看: 938|回复: 3

[已解决]关于指针数组疑惑

[复制链接]
发表于 2020-9-23 12:08:33 | 显示全部楼层 |阅读模式

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

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

x
        char *lines[5] = {
                "COSC1283/1284",
                "Programming",
                "Techniques",
                "is",
                "great fun"
        };
       
        printf("lines 0 mem add is %d\n",&lines[0]);        
        printf("lines 0 add is %d\n",lines[0]);


lines[0]可以理解为是一维数组吧,如上代码,为啥输出内容不一样,下面这种是一样的

char array[] = "abcdef";
        printf("array is %p\n",array);
        printf("&array is %p\n",&array);
        printf("&array[0] is %p\n",&array[0]);
最佳答案
2020-9-23 12:58:14
本帖最后由 sunrise085 于 2020-9-23 13:01 编辑

你这俩不一样啊。
上面的是指针,下面的是数组啊
&line[0]是指针line[0]的地址,line[0]是指针line[0]指向的地址,二者是不一样的
看下面的程序,对比一下,指针跳过的字节数是固定的,因为指针大小是固定的,指针指向的地址跳过的字节数是不固定的,因为你的这五个字符串长度不一样
#include<stdio.h>

int main()
{
    char *lines[5] = {
                "COSC1283/1284",
                "Programming",
                "Techniques",
                "is",
                "great fun"
        };
    for (int i=0;i<5;i++)
    {
        printf("lines[%d] 指针的地址 is %p\n",i,&lines[i]);         
        printf("lines[%d] 指针指向的 is %p\n",i,lines[i]); 
    }
}
而对于第二段程序,
数组的地址就是数组的首地址,也是数组首元素的地址,虽然意义不同,但是地址相同
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-23 12:58:14 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2020-9-23 13:01 编辑

你这俩不一样啊。
上面的是指针,下面的是数组啊
&line[0]是指针line[0]的地址,line[0]是指针line[0]指向的地址,二者是不一样的
看下面的程序,对比一下,指针跳过的字节数是固定的,因为指针大小是固定的,指针指向的地址跳过的字节数是不固定的,因为你的这五个字符串长度不一样
#include<stdio.h>

int main()
{
    char *lines[5] = {
                "COSC1283/1284",
                "Programming",
                "Techniques",
                "is",
                "great fun"
        };
    for (int i=0;i<5;i++)
    {
        printf("lines[%d] 指针的地址 is %p\n",i,&lines[i]);         
        printf("lines[%d] 指针指向的 is %p\n",i,lines[i]); 
    }
}
而对于第二段程序,
数组的地址就是数组的首地址,也是数组首元素的地址,虽然意义不同,但是地址相同
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-23 13:18:30 | 显示全部楼层
sunrise085 发表于 2020-9-23 12:58
你这俩不一样啊。
上面的是指针,下面的是数组啊
&line[0]是指针line[0]的地址,line[0]是指针line[0]指 ...

意思我明白了,我在细问一下,您看我理解的对不对:

lines[0]里保存的是"COSC1283/1284"的首字母"C"的地址么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-23 13:21:54 | 显示全部楼层
本帖最后由 sunrise085 于 2020-9-23 13:23 编辑
dysow 发表于 2020-9-23 13:18
意思我明白了,我在细问一下,您看我理解的对不对:

lines[0]里保存的是"COSC1283/1284"的首字母"C"的 ...


是的,line[0]内保存的是第一个字符串的首地址,也是第一个字符串第一个字母的地址
看下图,地址是我编的,你可以只看地址的最后两位,看地址变化量,应该都是8个字节,字符串的地址我懒得写了,只写了四个字节
对照一下你运行的结果
搜狗截图20200923131853.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 02:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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