字符串傳參

c語言中,字符串常量、字符數組、字符串指針三者作爲函數參數時,到了函數內部都會變成字符串指針(char*),原因是傳入函數的都是它們的首地址。

測試代碼如下:

#include<stdio.h> 
#include<typeinfo>

void print_type1(const char str_arg[])
{
    if(typeid(str_arg)==typeid(char*))
        printf("type is char*");
    if(typeid(str_arg)==typeid(char[]))
        printf("type is char[]");

    if(typeid(str_arg)==typeid(const char*))
        printf("type is const char*");
    if(typeid(str_arg)==typeid(const char[]))
        printf("type is const char[]");
}

void print_type2(const char* str_arg)
{

.    if(typeid(str_arg)==typeid(char*))
        printf("type is char*");
    if(typeid(str_arg)==typeid(char[]))
        printf("type is char[]");
    if(typeid(str_arg)==typeid(const char*))
        printf("type is const char*");
    if(typeid(str_arg)==typeid(const char[]))
        printf("type is const char[]");
}

void print_type3(char str_arg[])
{
    if(typeid(str_arg)==typeid(char*))
        printf("type is char*");
    if(typeid(str_arg)==typeid(char[]))
        printf("type is char[]");

    if(typeid(str_arg)==typeid(const char*))
        printf("type is const char*");
    if(typeid(str_arg)==typeid(const char[]))
        printf("type is const char[]");
}

void print_type4(char* str_arg)
{
    if(typeid(str_arg)==typeid(char*))
        printf("type is char*");
    if(typeid(str_arg)==typeid(char[]))
        printf("type is char[]");

    if(typeid(str_arg)==typeid(const char*))
        printf("type is const char*");
    if(typeid(str_arg)==typeid(const char[]))
        printf("type is const char[]");
}

int main()

{

    char c[]="abc";

    char* p=c;

    print_type1(c);

    print_type1("ab");

    print_type1(p);

    print_type2(c);

    print_type2("ab");

    print_type2(p);

    print_type3(c);

    print_type3("ab");                                     //新版c標準不允許這種寫法--const轉化爲非const,舊版只會報warning

    print_type3(p);

    print_type4(c);

    print_type4("ab");                                    //同上

    print_type4(p);

    return 0;

}

 

結果爲print_type1和print_type2的輸出爲:type is const char*;而print_type3和print_type4的輸出爲:type is char*。

這也說明了,形參帶const與否會影響函數內部的字符串參數類型,否則,即當形參無const聲明時,字符串參數在函數內部的類型不受形參聲明的影響。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章