Pointer vs. Reference
My rule of thumb is: Use pointers if you want to do pointer arithmetic with them (e.g. incrementing the pointer address to step through an array) or if you ever have to pass a NULL-pointer. Use references otherwise.
My rule of thumb is: Use pointers if you want to do pointer arithmetic with them (e.g. incrementing the pointer address to step through an array) or if you ever have to pass a NULL-pointer. Use references otherwise.
char* and char[] are different types, but it’s not immediately apparent in all cases. This is because arrays decay into pointers, meaning that if an expression of type char[] is provided where one of type char* is expected, the compiler automatically converts the array into a pointer to its first element. Your example function printSomething … Read more
In this case, your array variable arr can actually also be treated as a pointer to the beginning of your array’s block in memory, by an implicit conversion. This syntax that you’re using: int fillarr(int arr[]) Is kind of just syntactic sugar. You could really replace it with this and it would still work: int … Read more
It’s a “pointer to member” – the following code illustrates its use: #include <iostream> using namespace std; class Car { public: int speed; }; int main() { int Car::*pSpeed = &Car::speed; Car c1; c1.speed = 1; // direct access cout << “speed is ” << c1.speed << endl; c1.*pSpeed = 2; // access via pointer … Read more
nullptr has type std::nullptr_t. It’s implicitly convertible to any pointer type. Thus, it’ll match std::nullptr_t or pointer types in overload resolution, but not other types such as int. 0 (aka. C’s NULL bridged over into C++) could cause ambiguity in overloaded function resolution, among other things: f(int); f(foo *); (Thanks to Caleth pointing this out … Read more
foo->bar is equivalent to (*foo).bar, i.e. it gets the member called bar from the struct that foo points to.
I’ll interpret your question as two questions: 1) why -> even exists, and 2) why . does not automatically dereference the pointer. Answers to both questions have historical roots. Why does -> even exist? In one of the very first versions of C language (which I will refer as CRM for “C Reference Manual”, which … Read more
First thing, at the time the question was asked, uintptr_t was not in C++. It’s in C99, in <stdint.h>, as an optional type. Many C++03 compilers do provide that file. It’s also in C++11, in <cstdint>, where again it is optional, and which refers to C99 for the definition. In C99, it is defined as … Read more
Both of these classes are smart pointers, which means that they automatically (in most cases) will deallocate the object that they point at when that object can no longer be referenced. The difference between the two is how many different pointers of each type can refer to a resource. When using unique_ptr, there can be … Read more
If you want to have a list of characters (a word), you can use char *word If you want a list of words (a sentence), you can use char **sentence If you want a list of sentences (a monologue), you can use char ***monologue If you want a list of monologues (a biography), you can … Read more