字符数组和指针基本混淆

时间:2015-06-15 09:26:24

标签: c++ c arrays string pointers

我是指针的初学者。完成整数数组和指针后,我转移到字符数组和指针。我期待相同的结果,但它很奇怪。

int main() {    
    char chararray[20]="Char Array";      
    void printarray(char *);    
    void printarraydirect(char * );

    printf("Passing chararray to funtion printarray\n");    
    printarray(chararray);        
    printf("Printing directly as c in printarraydirect function");        
    printarraydirect(chararray);

     return 0;
}

void printarray(char *c){        
    int i=0;    
    //while(c[i]!= ' ')-----------------------> checks for empty space        
    while(c[i]!='\0')    
    {    
        printf("%c",c[i]);       
        i++;    
    }    
    printf("\n");    
}



void printarraydirect(char * c){        
    printf("Printing c-------------->");        
    printf("%s\n",c);        
    int i=0;        
    printf("Printing c[i]-------------->\n");
    // shows error here , if so why didnt it show me error in printarray function. and why didnt it print the whole array when printed c in printarray function..

    printf("%s\n" c[i]);

}

2 个答案:

答案 0 :(得分:2)

首先,您错过了ID ----------- 1 行上的逗号。其次,printf("%s\n" c[i]);是单个c[i](数组的元素类型),因此char格式不正确 - 应该%s来打印单个字符。或者,如果您希望从该点开始打印整个字符串,则需要传递该元素的地址(%c),但在这种情况下,与&c[i]相同,因为c }是零。

答案 1 :(得分:0)

基本上%s格式说明符需要打印到输出流的地址,并打印直到找到NULL字符(\0)。这里当你简单地给出c时,数组的基地址作为参数传递。但是当你给c[i]时,它是位于该位置的值(基地址+索引),即addressOf(c)+ valueOf(i)。