Pointer confusion


 
Thread Tools Search this Thread
Top Forums Programming Pointer confusion
# 1  
Old 02-16-2014
Pointer confusion

Here are two programs that pass a pointer to a variable but behave differently. Shouldnt the i in second program be 0 after the function call?

Code:
#include<stdio.h>

void changeI(int *i)
{
 *i = 10;
}

int main(void)
{
 int i=5;
 printf("%d before\n", i);
 changeI(&i);
 printf("%d after\n", i);
 return 0;
}

Code:
chlsvnc01> ./temp
5 before
10 after

Code:
chlsvnc01> cat prttst3.c
#include<stdio.h>

void copy_array(int * destArray, int * srcArray, int *i)
{
 while(*i)
 {
  *destArray++ = *srcArray++;
  *i--;
 }
 printf("%d is after copy\n", *i);
 return ;
}

int main (void)
{
 int i=30;
 int s[30] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29};
 int d[30];

 printf("i before = %d\n",i);
 copy_array(d,s,&i);
 printf("i after = %d\n",i);

 for(i=0;i<30;i++)
  printf("%d\t",d[i]);
 printf("\n");
 return 0;
}

Code:
chlsvnc01> ./prttst3
i before = 30
0 is after copy
i after = 30
0       1       2       3       4       5       6       7       8       9       10      11      12      13      14      15      16      17      18      19      20      21      22      23      24      25      26      27      28      29


Last edited by bartus11; 02-16-2014 at 12:02 PM.. Reason: Please use [code][/code] tags.
# 2  
Old 02-16-2014
The problem is that:

Code:
*i--;

decrements the pointer, not the pointed-to value. I.e. it's equivalent to:

Code:
*(i--);

What you really want is:

Code:
(*i)--;

(On my machine at least, your program worked by accident simply because of the location of i and s on the stack.)
This User Gave Thanks to JohnGraham For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Confusion in hash

Hi folks, If a declare a direct hash , then the hash element works fine. my %test = ("test",1); print %test; print "\n"; Here in the above, the name of the hash is predeclared... Suppose now I need to create the hash elements dynamically in the for loop. $test="hash"; my... (1 Reply)
Discussion started by: scriptscript
1 Replies

2. Shell Programming and Scripting

Confusion with PS

Hello All, I have a problem in counting number of process getting run with my current script name.. Here it is ps -ef | grep $0 | grep -v grep This display just one line with the PID, PPID and other details when i print it in the script. But when I want to count the numbers in my... (11 Replies)
Discussion started by: sathyaonnuix
11 Replies

3. Homework & Coursework Questions

Server Confusion

I don't even know where to start with this one. There is so much out there about different aspects of this. I am starting with a basic Ubuntu 11.04 install. Do I need to configure a DNS? I am a little confused about that. What do I need to do for a domain name? I have followed various tutorials,... (1 Reply)
Discussion started by: polyglot0727
1 Replies

4. Programming

shmget confusion?????

Hi friends, This is a small program built on the concept of shared memory. The producer is a separate program and process, and the consumer is a seperate program and process. Both are executed under the same user account. The producer takes some string from the user and adds that string to the... (1 Reply)
Discussion started by: gabam
1 Replies

5. Programming

C pointer/array duality confusion

Hi all, Can anyone provide help with getting the right syntax regarding array/pointers in C in the following code? Can't locate a specific example which clarifies this... Say I declare a typedef to an array of pointers to some type... /** * An array of ptrs to sections */ typedef... (4 Replies)
Discussion started by: gorga
4 Replies

6. Programming

pass a pointer-to-pointer, or return a pointer?

If one wants to get a start address of a array or a string or a block of memory via a function, there are at least two methods to achieve it: (1) one is to pass a pointer-to-pointer parameter, like: int my_malloc(int size, char **pmem) { *pmem=(char *)malloc(size); if(*pmem==NULL)... (11 Replies)
Discussion started by: aaronwong
11 Replies

7. UNIX for Dummies Questions & Answers

'tr' confusion

Good day, everyone! Could anybody explain me the following situation. If I'm running similar script: Var="anna.kurnikova" Var2="Anna Kurn" echo $Var | tr -t "$Var" "$Var2" Why the output is : anna KurniKova instead of Anna Kurnikova? :confused: Thank you in advance for any... (2 Replies)
Discussion started by: Nafanja
2 Replies

8. UNIX for Dummies Questions & Answers

confusion (file pointer and file descripter)

Hi everybody, i am newbie to unix and confused with file pointers and file descripters. could anyone help me to clear my doubts .. when we call unix system calls to create a file then we are dealing wih file descripters i think file descripters are also normals file as stored inhard disks... (1 Reply)
Discussion started by: johnray31
1 Replies

9. UNIX for Dummies Questions & Answers

ftp confusion

I'm an intern at a company that recently bought out another business. In doing so, they inherited a unix system that contains files which they need to retrieve. No one in the company, including myself, really understands or knows unix so please respond with the true assumption that I'm a unix... (1 Reply)
Discussion started by: intern
1 Replies

10. UNIX for Dummies Questions & Answers

unix confusion

:confused: some one please tell me where i can possibly find out what is unix 10.2 and the basic system functions of it is. I really need help! (1 Reply)
Discussion started by: tribb24
1 Replies
Login or Register to Ask a Question