首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

不明白一个守则

2013-03-14 
不明白一个规则比如我把 char**传到函数Fun(const char**)里面运行明明没有任何问题为什么非要强制转换,直

不明白一个规则
比如我把 char**传到函数Fun(const char**)里面运行明明没有任何问题

为什么非要强制转换,直接传就报错??

这个规则是为了防止什么问题而设计的??
[解决办法]
上下文呢,强制转换的代码呢? 问题不知所云。
[解决办法]
比较严谨的设计,char**和const char**通常所存放的物理位置设置是物理介质是不一样的,强制转换会有隐患,确实有需要,可以用strcpy或者是memcpy的显式方法。
[解决办法]
const指针和非const指针本来就是不兼容的类型,下面的代码可以编译过,编译器给warning。

# include <stdio.h>

void foo(const char ** a)
{
    char ** p = a;
    while (*p) {
        printf("%s\n", *p);
        p++;
    }
}

int main()
{
    char * a[] = {
        "foo",
        "bar",
        NULL,
    };

    foo(a);

    return 0;
}


[解决办法]
会提示警告类型不兼容.
[解决办法]

char**与char const**的关系不比char**与int const**的关系更亲。
int main()
{

int* p = 0;
int const* p1 = p; //T*-〉T const*:  OK
//p = p1; //T const* -> T* : NG
int* const p2 = p;//T*-> T*const for initialization: OK 
p = p2; //T*const-> T*: OK
//p2 = p; //T*-> T*const for assignmen: NG
//The following is your problem!!!! 
//char const* p3 = p; //T*->Z const* is  NG unless Z is void
void const* p4 = p; 
return 0;
}

[解决办法]
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!

[解决办法]
http://blog.csdn.net/eric_jo/article/details/4138548
给你找了一篇博客,写的还算可以!瞅瞅const的用法。我就不费口舌了

热点排行