What does while(*pointer) means in C?

后端 未结 5 2087
心在旅途
心在旅途 2020-12-15 12:45

When I recently look at some passage about C pointers, I found something interesting. What it said is, a code like this:

char var[10];
char *pointer = &v         


        
5条回答
  •  无人及你
    2020-12-15 13:15

    Yes, you can go for it.

    Please note that *pointer is the value at the memory location the pointer point to(or hold the address of).

    Your *pointer is now pointing to the individual characters of the character array var.

    So, while(*pointer) is shorthand usage of the equivalent

    while(*pointer!='\0').
    

    Suppose, your string is initialized to 9 characters say "123456789" and situated at an address say addr(memory location).

    Now because of the statement:

    char *pointer=&var;
    

    pointer will point to first element of string "1234567890".

    When you write the *pointer it will retrieve the value stored at the memory location addr which is 1.

    Now, the statement:

    while(*pointer)
    

    will be equivalent to

    while(49)
    

    because ASCII Value of 1 is 49, and condition is evaluated to true.

    This will continue till \0 character is reached after incrementing pointer for nine times.

    Now, the statement:

    while(*pointer)
    

    will be equivalent to

    while(0)
    

    because ASCII value of \0 is 0. Thus, condition is evaluated to false and loop stops.

    Summary:

    • In while(condition), condition must be non-zero to continue loop execution. If condition evaluates to zero then loop stops executing.

    • while(*pointer) will work till the value at memory location being pointed to is a non-zero ASCII value.

    • Also you can use:

      if(*ptr){     //instead of if(*ptr!='\0')
        //do somthing
      }
      
      if(!*ptr){     //instead of if(*ptr=='\0')
        //do somthing
      }
      

提交回复
热议问题