C ++中的值正在发生变化,我不知道为什么

时间:2016-06-20 21:20:36

标签: c arrays char sizeof

好吧,当我发现这种奇怪的行为时,我正在乱搞C。我使用sizeof运算符来获取main函数中数组的大小,然后我将数组传递给另一个函数并再次使用sizeof运算符并获得与初始值不同的数字。我第一次测试它得到12的正确值然后第二次测试它我得到4并且我不明白为什么。

     #include <stdio.h>
     #include <ctype.h>

     int canPrint(char ch) { return isalpha(ch) || isblank(ch); }
     void print_Letters(char arg)
     {
        if (canPrint(arg))printf("%c==%d \n",arg,arg);
     }
     void printarg(char ch[])
     {
        unsigned int value = sizeof(ch);//returns 4 
        for (int i = 0;i<value; i++)
        {
            print_Letters(ch[i]);
        }
     }
     int main(int argc, char *argv[])
     {
        char something[]="work please";
        printf("%d \n",sizeof(char));// return 1
        printf("%d \n",sizeof(something));//returns 12
        printarg(something);
        char ch;
        scanf_s(" %c",&ch);//used to stop program so that I can read results 
        return 0;
     }

2 个答案:

答案 0 :(得分:2)

void printarg(char ch[])实际上相当于void printarg(char* ch)。换句话说,数组不会自然地作为函数参数传递值,而是参数是一个指针。

因此,在函数中执行sizeof(ch)会返回指针的大小。

答案 1 :(得分:0)

使用char*(c中的字符串类型)时,最好使用以下循环:

     #include <string.h>

     void printarg(char ch[])
     {
        for (int i = 0;i<strlen(ch); i++)
        {
            print_Letters(ch[i]);
        }
     }

     void printarg(char ch[])
     {
        for (int i = 0;ch[i] > 0; i++)
        {
            print_Letters(ch[i]);
        }
     }