求大虾指导一个指针数组的问题
程序代码:#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 编辑 ]









