LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1067|回复: 8

双指针赋值问题.

[复制链接]
发表于 2005-1-8 15:40:39 | 显示全部楼层 |阅读模式
定义
char **entry;
char *a="aa";
char *b="bb";
想把a.b字符数组赋给entry,但不知道怎么赋,赋值之后又怎么引用entry中的"aa","bb"呢? :help

又char **entry 和char entry[12][12]中的entry是不是代表同一个地址的意思.
发表于 2005-1-8 16:36:27 | 显示全部楼层
entry = &a; 就行了,可以用 *entry 来引用 "aa"。

char **entry 中的 entry 是“指向 指向 char 的指针 的指针”这个类型,而 char entry[12][14] 中的 entry 是“一个有 12 个元素的数组,这个数组的每个元素是一个有 14 个元素的数组,后一个数组的每个元素是 char 类型”这个类型。在某些情况下,不能把第二个 entry 当作指针看待,因此在这些情况下 entry 就不是指向同一个地址了。
 楼主| 发表于 2005-1-10 09:16:40 | 显示全部楼层
谢谢你的回复,但我的意思是
如果我有两个字符串
char *aa = "aa";
char *bb = "bb";
char *entry;
我想printf("s%\n",entry[1]);的出的结果为aa;
我想printf("s%\n",entry[2]);的出的结果为bb;
我该怎样把aa,bb付给entry,通过entry数组应用aa,bb字符串.
发表于 2005-1-10 10:20:36 | 显示全部楼层
那就这样好了:
char ** entry;
entry = (char**)malloc( sizeof(char*) * 2 );
entry[0] = (char *)malloc(sizeof(char));
entry[1] = (char *)malloc(sizeof(char));
entry[0] = &aa;
entry[1] = &bb;

打印后free掉
发表于 2005-1-10 10:49:43 | 显示全部楼层
直接声明一个指针数组不就完了:
char *aa = "aa";
char *bb = "bb";
char *entry[2];
entry[1]=aa;
entry[2]=bb;
 楼主| 发表于 2005-1-10 10:49:57 | 显示全部楼层
不知道这样写对不?
[PHP]#include <stdio.h>

int main()
{
        char *aa = "bb";
        char *bb = "aa";
        char ** entry;
        entry = (char**)malloc( sizeof(char*) * 2 );
        entry[0] = (char *)malloc(sizeof(char));
        entry[1] = (char *)malloc(sizeof(char));
        entry[0] = &aa;
        entry[1] = &bb;
        printf("%s\n",entry[0]);
        printf("%s\n",entry[1]);
        free(entry);
}
[/PHP]

但打印出:
[root@WLX exa]# gcc cc.c
cc.c: In function `main':
cc.c:11: warning: assignment from incompatible pointer type
cc.c:12: warning: assignment from incompatible pointer type
[root@WLX exa]# ./a.out

B刳&#65533;縯UB

B刳&#65533;縯UB



另我在MAD中发现这种结构
[PHP]struct player {
  int verbosity;

  int options;
  int repeat;

  enum player_control control;

  struct playlist {
    char const **entries;
    int length;
    int current;
  } playlist;
...........
[/PHP]
它的playlist->entries是从命令行程序argv中得来的.
例如:madplay aa.mp3 bb.mp3 cc.mp3
playlist->entries就是从argv[1]开始的.


但我想图形化mad,所以mp3文件名是从一个循环得来的
for( i = 0;i < 100 ; i++ )
{
     char *aa = "mp3name";
     playlist->entries = aa;
     想:printf("%s\n",playlist->entries) == "mp3name";
}
我不知道该怎样把char **entries赋字符串,又怎样使用entries引用这些字符串的名字.
 楼主| 发表于 2005-1-10 10:56:37 | 显示全部楼层
Post by kj501
直接声明一个指针数组不就完了:
char *aa = "aa";
char *bb = "bb";
char *entry[2];
entry[1]=aa;
entry[2]=bb;


谢谢,不过我不知道这个数组具体有多大,它动态随机产生,
定义char *entry[]的时候就错误了,必需指定维数.
发表于 2005-1-10 12:00:15 | 显示全部楼层
这两句多余:
entry[0] = (char *)malloc(sizeof(char));
entry[1] = (char *)malloc(sizeof(char));
 楼主| 发表于 2005-1-10 12:43:55 | 显示全部楼层
万分感谢中.......(困扰了4天啊)
修改后如下:
[PHP]#include <stdio.h>

int main()
{
        char *aa = "bb";
        char *bb = "aa";
        char ** entry;
        entry = (char**)malloc( sizeof(char*) * 2 );
        //entry[0] = (char *)malloc(sizeof(char));
        //entry[1] = (char *)malloc(sizeof(char));
        entry[0] = aa;//这的&aa 改为aa,下同
        entry[1] = bb;
        printf("%s\n",entry[0]);
        printf("%s\n",entry[1]);
        free(entry);
}
[/PHP]
结果:
[root@WLX exa]# ./a.out
bb
aa
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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