Pointer Arithmetic
Pointer arithmetic allows you to perform operations such as incrementing, decrementing, and finding the difference between pointers. These operations are closely tied to the type of the pointer. When you increment or decrement a pointer, the pointer moves by the size of the type it points to, not just by one byte. For example, incrementing an int * pointer advances it by the size of an int (typically 4 bytes on many systems), while incrementing a char * pointer advances it by 1 byte, since a char is 1 byte. You can also subtract one pointer from another if both point to elements of the same array, and the result is the number of elements between them, not the number of bytes.
main.c
12345678910111213141516171819#include <stdio.h> int main() { int numbers[] = {10, 20, 30, 40, 50}; int *ptr = numbers; printf("First element: %d\n", *ptr); ptr++; // Move to the next element printf("Second element: %d\n", *ptr); ptr += 2; // Move two elements ahead printf("Fourth element: %d\n", *ptr); int diff = ptr - numbers; // How many elements between ptr and start printf("Pointer difference: %d\n", diff); return 0; }
Pointer arithmetic is especially useful when working with arrays. Since array elements are stored in contiguous memory locations, incrementing a pointer allows you to traverse the array efficiently. Accessing *(ptr + i) is equivalent to ptr[i], and both retrieve the value at the ith position from the pointer's current location. The memory layout of the array means that as you increment the pointer, you move from one element to the next according to the type's size. This is why pointer arithmetic is type-aware: moving a pointer by one always advances it to the next element of its type, regardless of the actual byte size.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Can you explain why pointer arithmetic is type-aware?
How does pointer arithmetic differ between different data types?
Can you give more examples of pointer arithmetic with arrays?
Fantastisk!
Completion rate forbedret til 9.09
Pointer Arithmetic
Stryg for at vise menuen
Pointer arithmetic allows you to perform operations such as incrementing, decrementing, and finding the difference between pointers. These operations are closely tied to the type of the pointer. When you increment or decrement a pointer, the pointer moves by the size of the type it points to, not just by one byte. For example, incrementing an int * pointer advances it by the size of an int (typically 4 bytes on many systems), while incrementing a char * pointer advances it by 1 byte, since a char is 1 byte. You can also subtract one pointer from another if both point to elements of the same array, and the result is the number of elements between them, not the number of bytes.
main.c
12345678910111213141516171819#include <stdio.h> int main() { int numbers[] = {10, 20, 30, 40, 50}; int *ptr = numbers; printf("First element: %d\n", *ptr); ptr++; // Move to the next element printf("Second element: %d\n", *ptr); ptr += 2; // Move two elements ahead printf("Fourth element: %d\n", *ptr); int diff = ptr - numbers; // How many elements between ptr and start printf("Pointer difference: %d\n", diff); return 0; }
Pointer arithmetic is especially useful when working with arrays. Since array elements are stored in contiguous memory locations, incrementing a pointer allows you to traverse the array efficiently. Accessing *(ptr + i) is equivalent to ptr[i], and both retrieve the value at the ith position from the pointer's current location. The memory layout of the array means that as you increment the pointer, you move from one element to the next according to the type's size. This is why pointer arithmetic is type-aware: moving a pointer by one always advances it to the next element of its type, regardless of the actual byte size.
Tak for dine kommentarer!