C: array sum using pointers [closed]
How could I get the sum of an array using only pointers ?
int array_sum(int *begin, int *end)
{
int arraysum = 0;
int *p = 0;
for (p = begin; p < end; p ++)
{
arraysum += *(arr + p);
}
return arraysum;
}
this doesn't compile at line
arraysum += *(arr + p);
c arrays sum
closed as off-topic by Fred Larson, chux, 4386427, usr, Govind Parmar Nov 21 '18 at 22:23
This question appears to be off-topic. The users who voted to close gave this specific reason:
- "Questions seeking debugging help ("why isn't this code working?") must include the desired behavior, a specific problem or error and the shortest code necessary to reproduce it in the question itself. Questions without a clear problem statement are not useful to other readers. See: How to create a Minimal, Complete, and Verifiable example." – Fred Larson, chux, 4386427, usr
If this question can be reworded to fit the rules in the help center, please edit the question.
|
show 4 more comments
How could I get the sum of an array using only pointers ?
int array_sum(int *begin, int *end)
{
int arraysum = 0;
int *p = 0;
for (p = begin; p < end; p ++)
{
arraysum += *(arr + p);
}
return arraysum;
}
this doesn't compile at line
arraysum += *(arr + p);
c arrays sum
closed as off-topic by Fred Larson, chux, 4386427, usr, Govind Parmar Nov 21 '18 at 22:23
This question appears to be off-topic. The users who voted to close gave this specific reason:
- "Questions seeking debugging help ("why isn't this code working?") must include the desired behavior, a specific problem or error and the shortest code necessary to reproduce it in the question itself. Questions without a clear problem statement are not useful to other readers. See: How to create a Minimal, Complete, and Verifiable example." – Fred Larson, chux, 4386427, usr
If this question can be reworded to fit the rules in the help center, please edit the question.
1
Why do you addarr
andp
? Just use*p
.
– tkausl
Nov 21 '18 at 21:49
So that I can get arr[p] ?
– cuckcuc
Nov 21 '18 at 21:49
This only works if you're iterating over indicies which you aren't. You're iterating over the memory-locations of the array, sop
always points to the current number.
– tkausl
Nov 21 '18 at 21:50
3
What isarr
?
– John3136
Nov 21 '18 at 21:51
2
You need to post all the code. How is the function called? What isarr
?
– 4386427
Nov 21 '18 at 21:56
|
show 4 more comments
How could I get the sum of an array using only pointers ?
int array_sum(int *begin, int *end)
{
int arraysum = 0;
int *p = 0;
for (p = begin; p < end; p ++)
{
arraysum += *(arr + p);
}
return arraysum;
}
this doesn't compile at line
arraysum += *(arr + p);
c arrays sum
How could I get the sum of an array using only pointers ?
int array_sum(int *begin, int *end)
{
int arraysum = 0;
int *p = 0;
for (p = begin; p < end; p ++)
{
arraysum += *(arr + p);
}
return arraysum;
}
this doesn't compile at line
arraysum += *(arr + p);
c arrays sum
c arrays sum
asked Nov 21 '18 at 21:47
cuckcuccuckcuc
13
13
closed as off-topic by Fred Larson, chux, 4386427, usr, Govind Parmar Nov 21 '18 at 22:23
This question appears to be off-topic. The users who voted to close gave this specific reason:
- "Questions seeking debugging help ("why isn't this code working?") must include the desired behavior, a specific problem or error and the shortest code necessary to reproduce it in the question itself. Questions without a clear problem statement are not useful to other readers. See: How to create a Minimal, Complete, and Verifiable example." – Fred Larson, chux, 4386427, usr
If this question can be reworded to fit the rules in the help center, please edit the question.
closed as off-topic by Fred Larson, chux, 4386427, usr, Govind Parmar Nov 21 '18 at 22:23
This question appears to be off-topic. The users who voted to close gave this specific reason:
- "Questions seeking debugging help ("why isn't this code working?") must include the desired behavior, a specific problem or error and the shortest code necessary to reproduce it in the question itself. Questions without a clear problem statement are not useful to other readers. See: How to create a Minimal, Complete, and Verifiable example." – Fred Larson, chux, 4386427, usr
If this question can be reworded to fit the rules in the help center, please edit the question.
1
Why do you addarr
andp
? Just use*p
.
– tkausl
Nov 21 '18 at 21:49
So that I can get arr[p] ?
– cuckcuc
Nov 21 '18 at 21:49
This only works if you're iterating over indicies which you aren't. You're iterating over the memory-locations of the array, sop
always points to the current number.
– tkausl
Nov 21 '18 at 21:50
3
What isarr
?
– John3136
Nov 21 '18 at 21:51
2
You need to post all the code. How is the function called? What isarr
?
– 4386427
Nov 21 '18 at 21:56
|
show 4 more comments
1
Why do you addarr
andp
? Just use*p
.
– tkausl
Nov 21 '18 at 21:49
So that I can get arr[p] ?
– cuckcuc
Nov 21 '18 at 21:49
This only works if you're iterating over indicies which you aren't. You're iterating over the memory-locations of the array, sop
always points to the current number.
– tkausl
Nov 21 '18 at 21:50
3
What isarr
?
– John3136
Nov 21 '18 at 21:51
2
You need to post all the code. How is the function called? What isarr
?
– 4386427
Nov 21 '18 at 21:56
1
1
Why do you add
arr
and p
? Just use *p
.– tkausl
Nov 21 '18 at 21:49
Why do you add
arr
and p
? Just use *p
.– tkausl
Nov 21 '18 at 21:49
So that I can get arr[p] ?
– cuckcuc
Nov 21 '18 at 21:49
So that I can get arr[p] ?
– cuckcuc
Nov 21 '18 at 21:49
This only works if you're iterating over indicies which you aren't. You're iterating over the memory-locations of the array, so
p
always points to the current number.– tkausl
Nov 21 '18 at 21:50
This only works if you're iterating over indicies which you aren't. You're iterating over the memory-locations of the array, so
p
always points to the current number.– tkausl
Nov 21 '18 at 21:50
3
3
What is
arr
?– John3136
Nov 21 '18 at 21:51
What is
arr
?– John3136
Nov 21 '18 at 21:51
2
2
You need to post all the code. How is the function called? What is
arr
?– 4386427
Nov 21 '18 at 21:56
You need to post all the code. How is the function called? What is
arr
?– 4386427
Nov 21 '18 at 21:56
|
show 4 more comments
2 Answers
2
active
oldest
votes
You could do something like this.
int array_sum(int *begin, int *end)
{
int arraysum = 0;
while (begin < end)
{
arraysum += *begin;
++begin;
}
return arraysum;
}
Ah YES ! I perfectly understand this
– cuckcuc
Nov 21 '18 at 21:56
add a comment |
for (p = begin; p < end; p ++)
{
arraysum += *(arr + p);
}
This doesn't work because you can't add arr
and p
. You don't need to add anything to p
, your number is in *p
.
As to why: When you iterate over indicies, i.e. 0
to arraylength - 1
, you always use the begin pointer and add the index to it to find you number. In your loop however, you copy the beginning pointer to p
and increment P
directly, so p
starts at the first number, once incremented points at the second number, and so on, until p
and end
are the same, note the p < end
as condition.
dont understand how the loop is incremented. we get at first p = begin
(adress number) right ? What does it exactly do at p ++ ? It does p +
1 right ? but adresses of int are of size 4 ???
Pointer-Arithmetic makes this possible. Math on pointers works a bit different, essentially making sure that you add/subtract multiples of the objects size. So adding one to your int-pointer actually adds sizeof(int)
under the hood. This is also how array-indicies work, array[i]
is equivalent to *(array + i)
.
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
You could do something like this.
int array_sum(int *begin, int *end)
{
int arraysum = 0;
while (begin < end)
{
arraysum += *begin;
++begin;
}
return arraysum;
}
Ah YES ! I perfectly understand this
– cuckcuc
Nov 21 '18 at 21:56
add a comment |
You could do something like this.
int array_sum(int *begin, int *end)
{
int arraysum = 0;
while (begin < end)
{
arraysum += *begin;
++begin;
}
return arraysum;
}
Ah YES ! I perfectly understand this
– cuckcuc
Nov 21 '18 at 21:56
add a comment |
You could do something like this.
int array_sum(int *begin, int *end)
{
int arraysum = 0;
while (begin < end)
{
arraysum += *begin;
++begin;
}
return arraysum;
}
You could do something like this.
int array_sum(int *begin, int *end)
{
int arraysum = 0;
while (begin < end)
{
arraysum += *begin;
++begin;
}
return arraysum;
}
edited Nov 21 '18 at 21:58
answered Nov 21 '18 at 21:54
alamitalamit
36719
36719
Ah YES ! I perfectly understand this
– cuckcuc
Nov 21 '18 at 21:56
add a comment |
Ah YES ! I perfectly understand this
– cuckcuc
Nov 21 '18 at 21:56
Ah YES ! I perfectly understand this
– cuckcuc
Nov 21 '18 at 21:56
Ah YES ! I perfectly understand this
– cuckcuc
Nov 21 '18 at 21:56
add a comment |
for (p = begin; p < end; p ++)
{
arraysum += *(arr + p);
}
This doesn't work because you can't add arr
and p
. You don't need to add anything to p
, your number is in *p
.
As to why: When you iterate over indicies, i.e. 0
to arraylength - 1
, you always use the begin pointer and add the index to it to find you number. In your loop however, you copy the beginning pointer to p
and increment P
directly, so p
starts at the first number, once incremented points at the second number, and so on, until p
and end
are the same, note the p < end
as condition.
dont understand how the loop is incremented. we get at first p = begin
(adress number) right ? What does it exactly do at p ++ ? It does p +
1 right ? but adresses of int are of size 4 ???
Pointer-Arithmetic makes this possible. Math on pointers works a bit different, essentially making sure that you add/subtract multiples of the objects size. So adding one to your int-pointer actually adds sizeof(int)
under the hood. This is also how array-indicies work, array[i]
is equivalent to *(array + i)
.
add a comment |
for (p = begin; p < end; p ++)
{
arraysum += *(arr + p);
}
This doesn't work because you can't add arr
and p
. You don't need to add anything to p
, your number is in *p
.
As to why: When you iterate over indicies, i.e. 0
to arraylength - 1
, you always use the begin pointer and add the index to it to find you number. In your loop however, you copy the beginning pointer to p
and increment P
directly, so p
starts at the first number, once incremented points at the second number, and so on, until p
and end
are the same, note the p < end
as condition.
dont understand how the loop is incremented. we get at first p = begin
(adress number) right ? What does it exactly do at p ++ ? It does p +
1 right ? but adresses of int are of size 4 ???
Pointer-Arithmetic makes this possible. Math on pointers works a bit different, essentially making sure that you add/subtract multiples of the objects size. So adding one to your int-pointer actually adds sizeof(int)
under the hood. This is also how array-indicies work, array[i]
is equivalent to *(array + i)
.
add a comment |
for (p = begin; p < end; p ++)
{
arraysum += *(arr + p);
}
This doesn't work because you can't add arr
and p
. You don't need to add anything to p
, your number is in *p
.
As to why: When you iterate over indicies, i.e. 0
to arraylength - 1
, you always use the begin pointer and add the index to it to find you number. In your loop however, you copy the beginning pointer to p
and increment P
directly, so p
starts at the first number, once incremented points at the second number, and so on, until p
and end
are the same, note the p < end
as condition.
dont understand how the loop is incremented. we get at first p = begin
(adress number) right ? What does it exactly do at p ++ ? It does p +
1 right ? but adresses of int are of size 4 ???
Pointer-Arithmetic makes this possible. Math on pointers works a bit different, essentially making sure that you add/subtract multiples of the objects size. So adding one to your int-pointer actually adds sizeof(int)
under the hood. This is also how array-indicies work, array[i]
is equivalent to *(array + i)
.
for (p = begin; p < end; p ++)
{
arraysum += *(arr + p);
}
This doesn't work because you can't add arr
and p
. You don't need to add anything to p
, your number is in *p
.
As to why: When you iterate over indicies, i.e. 0
to arraylength - 1
, you always use the begin pointer and add the index to it to find you number. In your loop however, you copy the beginning pointer to p
and increment P
directly, so p
starts at the first number, once incremented points at the second number, and so on, until p
and end
are the same, note the p < end
as condition.
dont understand how the loop is incremented. we get at first p = begin
(adress number) right ? What does it exactly do at p ++ ? It does p +
1 right ? but adresses of int are of size 4 ???
Pointer-Arithmetic makes this possible. Math on pointers works a bit different, essentially making sure that you add/subtract multiples of the objects size. So adding one to your int-pointer actually adds sizeof(int)
under the hood. This is also how array-indicies work, array[i]
is equivalent to *(array + i)
.
edited Nov 21 '18 at 22:03
answered Nov 21 '18 at 21:54
tkausltkausl
8,05912142
8,05912142
add a comment |
add a comment |
1
Why do you add
arr
andp
? Just use*p
.– tkausl
Nov 21 '18 at 21:49
So that I can get arr[p] ?
– cuckcuc
Nov 21 '18 at 21:49
This only works if you're iterating over indicies which you aren't. You're iterating over the memory-locations of the array, so
p
always points to the current number.– tkausl
Nov 21 '18 at 21:50
3
What is
arr
?– John3136
Nov 21 '18 at 21:51
2
You need to post all the code. How is the function called? What is
arr
?– 4386427
Nov 21 '18 at 21:56