标题:指针数组问题求大神,谢谢大家
只看楼主
lzrcoming
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2014-4-21
得分:0 
回复 9 楼 wp231957
还有我想定义一个指针指向static const char *tblDec_Hex = "0123456789ABCDEF";这个数组的首地址,怎么定义,char **p = tblDec_Hex不对
2014-05-19 14:34
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
难道是这个意思吗

程序代码:
#include <stdio.h>
#include <string.h>

int main(void)
{
    static char *tblHex_Bin[16] = 
                            {
                                "0000","0001","0010","0011",
                                "0100","0101","0110","0111",
                                "1000","1001","1010","1011",
                                "1100","1101","1110","1111"
                            };
    printf("请输入待比较字符串(长度为4位 0 1 组合):\n");
    char ptmp[256]={'\0'};
    scanf("%s",ptmp);
    int i;
    for(i=0;i<16;i++)
    {
        if(strcmp(tblHex_Bin[i],ptmp)==0) 
        {
            printf("找到目标 索引值是%d\n",i);
            break;
        }

    }
    return 0;
}

/*
D:\c_source\w5\Debug>w5
请输入待比较字符串(长度为4位 0 1 组合):
0011
找到目标 索引值是3

D:\c_source\w5\Debug>w5
请输入待比较字符串(长度为4位 0 1 组合):
1111
找到目标 索引值是15

D:\c_source\w5\Debug>w5
请输入待比较字符串(长度为4位 0 1 组合):
1001
找到目标 索引值是9
*/

DO IT YOURSELF !
2014-05-19 14:38
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
以下是引用lzrcoming在2014-5-19 14:34:20的发言:

还有我想定义一个指针指向static const char *tblDec_Hex = "0123456789ABCDEF";这个数组的首地址,怎么定义,char **p = tblDec_Hex不对



说来说去 还是不知道你到底想干嘛

程序代码:
#include <stdio.h>
#include <string.h>

int main(void)
{
    static const char *tblDec_Hex = "0123456789ABCDEF";
    static const char* p=tblDec_Hex;
    int i;
    for(i=0;i<16;i++)
    {
        printf("%c\n",*p++);
    }
    return 0;
}

/*
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
*/

DO IT YOURSELF !
2014-05-19 14:43
lzrcoming
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2014-4-21
得分:0 
回复 12 楼 wp231957
//二进制转十六进制
char *bin2hex(const char *pBinIN, int len, char *pHexOUT)
{
    int i = 0, j = 0, k = 0;
    char *pBin = NULL, *p = NULL, *pTmp = NULL;
    char *p3 = NULL;
    int lenof4 = 0, len_Bin = 0;
   
    //长度为4的倍数
    lenof4 = len % 4;
    if (lenof4 == 0)
    {
        len_Bin = len;
    }
    else
    {
        len_Bin = len + 4 - lenof4;        
    }
   
    //分配内存
    pBin = (char *)malloc(len_Bin + 1);
    pTmp = (char *)malloc(5);
    p3 = pTmp;
    memset(pBin, '0', len_Bin + 1);
    memset(pTmp, '0', 5);
   
    //连接传入的二进制数,补齐为4的倍数
    if (lenof4 == 0)
    {
        *pBin = '\0';
    }
    else
    {
        //最左侧长度<4补0
        pBin[4 - lenof4] = '\0';
    }
    strncat(pBin, pBinIN, len);
   
    printf("补齐的二进制数为:%s\n", pBin);
   
    //查表得到十六进制数
    for (i = 0; i < len_Bin;)
    {
        //得到4个二进制数pTmp
        p = pBin + i;
        strncpy(pTmp, p, 4);
        pTmp += 4;
        *pTmp = '\0';
        pTmp = p3;
        
        //查十六进制-二进制表,得到下标j
        for (j = 0; j < 16; j++, p4++)
        {
            if (strcmp(*p4, pTmp) == 0)
            {
                //根据下标j查十六进制表得一个十六进制数
                pHexOUT[k++] = tblDec_Hex[j];
               
                break;
            }
        }
        
        i = i + 4;
    }
   
    //字符串补上结束标志
    pHexOUT[k] = '\0';
   
    //释放内存
    if (pBin != NULL)
    {
        free(pBin);
        pBin = NULL;
    }
    if (pTmp != NULL)
    {
        free(pTmp);   
        pTmp = NULL;
    }
   
    return pHexOUT;
}

恩恩,还有一个问题麻烦您,这个是我调用的子程序,    //根据下标j查十六进制表得一个十六进制数
                                                    pHexOUT[k++] = tblDec_Hex[j];
这一行,我想把tblDec_Hex[j];用指针替代。不用数组的形式,前面的定义是  static const char *tblDec_Hex = "0123456789ABCDEF";怎么定义一个指针指向他的首地址??
2014-05-19 14:44
lzrcoming
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2014-4-21
得分:0 
回复 13 楼 wp231957
  static const char* p=tblDec_Hex;
就指向了tblDec_Hex的首地址对吗??然后**p是tblDec_Hex内的元素对吗?
2014-05-19 14:47
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
以下是引用lzrcoming在2014-5-19 14:47:12的发言:

  static const char* p=tblDec_Hex;
就指向了tblDec_Hex的首地址对吗??然后**p是tblDec_Hex内的元素对吗?



看一下我13楼的代码  static const char* p=tblDec_Hex;  是指向首地址没错  p是数组指针  *p是内容  哪来的**p啊

DO IT YOURSELF !
2014-05-19 15:06
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
得分:0 
以下是引用lzrcoming在2014-5-19 14:18:48的发言:

**p指向的是他的地址吧??我想引用内容的话就是*p?
**p 是“字符指针”的指针,或者说是“地址的地址”。
2014-05-19 15:56
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
得分:0 
以下是引用lzrcoming在2014-5-19 14:34:20的发言:

还有我想定义一个指针指向static const char *tblDec_Hex = "0123456789ABCDEF";这个数组的首地址,怎么定义,char **p = tblDec_Hex不对
这里就仅仅是“字符的指针”,因此定义为 char *p=tblDec_Hex 即可。
2014-05-19 15:57
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
得分:0 
楼主看来是被单重指针和多重指针搞晕了。
2014-05-19 15:58
lzrcoming
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2014-4-21
得分:0 
回复 19 楼 top398
嗯啊,特别晕现在,越看越乱,谢谢哈
2014-05-19 16:13



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-431761-1-1.html




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

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