| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1260 人关注过本帖
标题:求大虾指导一个指针数组的问题
只看楼主 加入收藏
sisox
Rank: 2
等 级:论坛游民
帖 子:19
专家分:28
注 册:2012-1-25
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:20 
求大虾指导一个指针数组的问题
程序代码:
#include <stdio.h>
#include <stdlib.h>
void str_out(char *p[],int n);
int main(void) {
    char *p[3]={NULL};
    char a[]="test1";
    char b[]="test2";
    char c[]="test2";
    p[0]=a;
    p[1]=b;
    p[2]=c;
   str_out(p,3);
    return 0;
}
void str_out(char *p[],int n) {
    int i=0;
    for( ;i<n;i++ ) {
        printf("%s\n",*p);
        free(*p);
        *p++=NULL;
    }
    return;
}                  
以上代码编译运行后没有问题.
程序代码:
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    char *p[3]={NULL};
    char a[]="test1";
    char b[]="test2";
    char c[]="test2";
    p[0]=a;
    p[1]=b;
    p[2]=c;
    int i=0;
    for( ;i<3;i++ ) {
        printf("%s\n",*p);
        free(*p);
        *p++=NULL;
//在该句将会报错  mingw提示: 错误:自增操作数必须是左值(左值:C/C++语言中可以放在赋值符号左边的变量,即具有对应的可以由用户访问的存储单元,并且能够由用户去改变其值的量)
    }
    return 0;
}

将str_out的代码放到main()中就会编译出错
环境是editplus+mingw

我个人的理解在 15L 由于不想让帖子太长 所以就给个链接 抱歉:https://bbs.bccn.net/viewthread.php?tid=415141&extra=&page=2#pid2313352

说明一下:
关于那些看起来很烦人的 a b c 的问题
我只是为了测试一下代码功能
书上的str_out包含于一个程序中
程序的功能是 : 读取命令行的多行输入 让后对多行语句进行字母排序并显示
我将str_out单独挑出来实验一下 所以添加 a,b,c 省去前面的读取命令行输入的代码 望大家可以理解

附上Editplus的编译&运行结果:
第一个代码
图片附件: 游客没有浏览图片的权限,请 登录注册

第二个代码
图片附件: 游客没有浏览图片的权限,请 登录注册



[ 本帖最后由 sisox 于 2013-6-14 02:13 编辑 ]
搜索更多相关主题的帖子: color 
2013-06-14 00:27
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
楼主确定你说对的那个代码可以运行?

我用的vs,可以编译连接,可是不能运行额。。。


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-14 01:12
sisox
Rank: 2
等 级:论坛游民
帖 子:19
专家分:28
注 册:2012-1-25
收藏
得分:0 
回复 2楼 蚕头燕尾
谢谢提醒
自己想让语句显得简洁些就改了一下
之前的代码也可以在Editplus上面编译并且运行 但是会有警告 你试试新改的行不行
2013-06-14 01:22
dengluoy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:127
专家分:165
注 册:2013-2-5
收藏
得分:0 
p其实是一个数组,然而他的元素是指针。你的printf()输出的是*p  等于是p的首地址。我用的是手机。你自己理解理解。明天来给你看。我也是新手一起学习。

一同学习, 一同进步
2013-06-14 01:23
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
     char *p[4]={"1","2","3"};
     int i;
     for(i=0;i<3;i++ )
     {
         printf("%s\n",p[i]);
         
         //*p++=NULL;
         p[i]=NULL;
         //free要在这里执行,不能放在前面,否则就是你已经free了,再进行操作,
         //编译器当然要提醒你:必须是可修改的左值
         free(p[i]);
    }
     return 0;
 }

学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-14 01:29
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
像是*p++=NULL这样的代码,

我不知道别人的态度如何

总之,我感觉我作为一个小白,还是

不想写成这样的。。。


毕竟自己都是要好好思考才能下手,还不如直接了当的写明白了,

虽然代码长一点,但是看着舒服。。


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-14 01:31
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
新改的还是报错

额,不明白你初始化的时候,为什么要写的这么纠结。。

看着好难受的说。。
     char *p[3]={NULL};
     char a[]="test1";
     char b[]="test2";
     char c[]="test2";
     p[0]=a;
     p[1]=b;
     p[2]=c;

问题应该还是出在这里
         free(*p);
         *p++=NULL;

free的顺序问题。。



学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-14 01:34
sisox
Rank: 2
等 级:论坛游民
帖 子:19
专家分:28
注 册:2012-1-25
收藏
得分:0 
回复 6楼 蚕头燕尾
谢谢回答 这个for循环的代码是摘抄的书上的一个代码(本来是置于str_out函数中) 我只是想测试一下放在main()中会如何
2013-06-14 01:35
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
好吧,如果你执意认为书是对的,

那我也没有什么可说的了,

静待楼下高手出现。。。。


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-14 01:37
sisox
Rank: 2
等 级:论坛游民
帖 子:19
专家分:28
注 册:2012-1-25
收藏
得分:0 
回复 7楼 蚕头燕尾
关于那个添加 a b c 的问题
我只是为了测试一下
书上的str_out包含于一个程序中
程序的功能是 : 读取命令行的多行输入 让后对多行语句进行字母排序并显示
我将str_out单独挑出来实验一下 所以添加 a,b,c 省去前面的读取命令行输入的环节
2013-06-14 01:38
快速回复:求大虾指导一个指针数组的问题
数据加载中...
 
   



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

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