Is there a way to cross over all elements in integer array using pointer ( similiar to using pointer to cross over string elements).I know that integer array is not NULL terminated so when I try to cross over array using pointer it overflows.So I added NULL as a last element of an array and it worked just fine.
int array[7]={1,12,41,45,58,68,NULL};
int *i;
for(i=array;*i;i++)
printf("%d ",*i);
But what if one of the elements in array is 0 ,that will behave just as NULL.Is there any other way that will implement pointer in crossing over all elements in integer array?
The reason that you can iterate across a C-style string using pointers is that of the 256 different character values, one has been specifically reserved to be interpreted as “this is the end of the string.” Because of this, C-style strings can’t store null characters anywhere in them.
When you’re trying to use a similar trick for integer arrays, you’re noticing the same problem. If you want to be able to stop at some point, you’ll have to pick some integer and reserve it to mean “this is not an integer; it’s really the end of the sequence of integers.” So no, there is no general way to take an array of integers and demarcate the end by a special value unless you’re willing to pick some value that can’t normally appear in the string.
C++ opted for a different approach than C to delineate sequences. Instead of storing the elements with some sort of null terminator, C++-style ranges (like you’d find in a
vector,string, orlist) store two iterators,begin()andend(), that indicate the first element and first element past the end. You can iterate over these ranges by writingThis approach is much more flexible than the C-string approach to defining ranges as it doesn’t rely on specific properties of any values in the range. I would suggest opting to use something like this if you want to iterate over a range of integer values. It’s more explicit about the bounds of the range and doesn’t run into weird issues where certain values can’t be stored in the range.