好吧,当我发现这种奇怪的行为时,我正在乱搞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;
}
答案 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]);
}
}