Can I access pointers from any function without sending info from main() to each function? I've tried looking for information but couldn't find an answer.
            Asked
            
        
        
            Active
            
        
            Viewed 124 times
        
    0
            
            
         
    
    
        We Are All Monica
        
- 13,000
- 8
- 46
- 72
 
    
    
        user3753834
        
- 277
- 2
- 5
- 11
- 
                    As long as the function can reach the pointer, either because pointer is global or passed as function variable, then yes. – AntonH Aug 12 '14 at 19:38
- 
                    A pointer is a variable like any other. As such, it can only be accessed from other functions if it's a global, same as any other variable. – Mooing Duck Aug 12 '14 at 19:38
- 
                    Can you? yes. should you? no. – yamafontes Aug 12 '14 at 19:39
- 
                    Some sample code to show what you have a hard time understanding would really help. As it is the question is way too broad for anyone to help you. Please read http://stackoverflow.com/help/dont-ask. – Asics Aug 12 '14 at 19:55
- 
                    Depends on what you mean by "access a pointer"; are you talking about using a pointer *variable* declared within `main` or elsewhere in the program, or are you talking about accessing a memory location directly (along the lines of `char *p = 0xDEADBEEF;`)? – John Bode Aug 12 '14 at 20:44
4 Answers
2
            
            
        Did you try it?
Yes, you can, but using lots of global variables is not a good idea.
 
    
    
        Community
        
- 1
- 1
 
    
    
        We Are All Monica
        
- 13,000
- 8
- 46
- 72
- 
                    It would be trivial to try it. I can't understand why such questions are asked. – Martin James Aug 12 '14 at 20:01
0
            
            
        If the pointer is passed to the function as parameter or it is declared as global then yes.
 
    
    
        Nanc
        
- 464
- 5
- 15
- 
                    What do you mean by "passed by reference"? There are no references in C. Why does not ordinary pass-by-value suffice? – The Paramagnetic Croissant Aug 12 '14 at 19:43
0
            
            
        Yes you can, because address of variable - it's her own unique identifier in memory space, like a house address within the big city. And e.g. for debug reasons it can be very helpfull (the only thing you should be sure about - live scope of this variable, because when variable leaves her scope - pointer to this address is no longer valid).
 
    
    
        ars
        
- 707
- 4
- 14
0
            
            
        As others have said: There are good reasons to not use many globals ("locality of code" is useful), but careful use of globals is justified in some cases. An example might help:
// A slightly contrived example to show how and when you 
// might use a global variable in a C program.
#include <stdio.h>
#include <stdlib.h>
// The following are compile-time constants, and considered
// good coding practice
#define DEBUG_WARN 1
#define DEBUG_ERROR 2
// The following is a global, accessible from any function,
// and should be used cautiously.  Note the convention (not
// universally adopted) of prefixing its name with "g_"
int g_debug_threshold = 0;
// debug_print() uses the global variable to
// decide whether or not to print a debug message.
void debug_print(char *msg, int level) {
  if (level >= g_debug_threshold) {
    fprintf(stderr, "%s\n", msg);
  }
}
void foo() {
  debug_print("hi mom", DEBUG_WARN);
}
int main(int ac, char **av) {
  // Here we set the debug threshold at runtime
  if (ac > 1) {
    g_debug_threshold = atoi(av[1]);
  }
  foo();
}
 
    
    
        fearless_fool
        
- 33,645
- 23
- 135
- 217