Created
October 5, 2017 22:06
-
-
Save MohamedTaha98/ccdf734f13299efb73ff0b12f7ce429f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // Djb2 hash function | |
| unsigned long hash(char *str) { | |
| unsigned long hash = 5381; | |
| int c; | |
| while ((c = *str++)) | |
| hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ | |
| return hash % NUM_BUCKETS; | |
| } |
hi I'm noob what does while ((c=*str++)) means?
Hi,
In C when you do an assignment like x = 2, it's considered a function, so if(x = 2) would be evaluated as true.
Now if we break down the statement in the while we:
- de-reference str (
*str), in other words, we get the character at this address in the string. - we assign the value to
c. - we advance the str pointer to the next character (
str++).
As said earlier, the character assigned tocgets evaluated as a boolean, the last character of a C string'\0'is evaluated tofalseso the while loop exits when reaching the end of the string.
Hope that helped!
Thanks for the code! helped me build a hash table for CS50 course.
Thanks a lot for this sharing
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
hi I'm noob
what does while ((c=*str++)) means?