I was wondering what is the difference between these two lines of code?
int hi;
int *hi;
In the C programming language?
开发者_开发百科Thanks! Amit
int hi;
reserves the space for an int
in memory, and each time you reference hi
, you either read or write directly that int
in memory space.
int *hi;
reserves the space for a pointer
to an int
in memory, each time hi
is used, the pointer is either read or written. Meaning that you are not working with an int
, only a pointer to an int
- there must exist an int
somewhere for the pointer to reference something workable. For instance
int hi;
int *phi;
phi = &hi; // phi references the int hi
*phi = 3; // set `hi` to 3
int hi
declares the variable hi to be an integer.
int *hi
declares the variable hi to be a pointer to an integer.
The first declares an integer variable, while the second declares a pointer to an integer.
Pointers are beyond the scope of a StackOverflow post, but this Wikipedia article is a starting point, and there should be at least a chapter on pointers in whatever book you're using to learn C.
hi
stores the integer type value in a particular location, but
*hi
stores the address of any int type variable.
Example :
int hi = 10;
int *hello = &hi;
int hi------ indicates that hi is the integer which allocates 2 bytes for it. int *hi------ * indicates the pointer which holds the address of the variable and that variable is an integer. both are different.one indicates the integer and the other indicates the address of the integer.
int hi; reserve a place in the memory for an integer variable while int *ptr; reserve a place in the memory for a pointer which contain the memory address of other variable. you can use the pointers in different ways.
int *ptr = hi;
int *ptr;
ptr = &hi;
when you change the value of the ptr you change the address where it is pointing for but if you changed the value after de-referencing the address you are changing the value of the other variable.
*ptr = 3;
leads to change the value of hi;
a. int i;
b. int *address;
c. address = &i;
In line a an integer variable named i
is declared. When this is done the compiler reserves a memory space of size sizeof(int)
(it's 4 byte on my computer). If you want to refer to this memory space then you have to use pointers.
Line b declares a variable named address
which has a special property. This variable doesn't holds an int
but it stores the address of a variable that is of type int
. Therefore, whatever value address
has, it should be interpreted as the address of a variable which is of type int
. Currently, the variable address
doesn't hold any memory address in it as we haven't yet defined which variable's memory address it has to hold.
Line c can be read as "address is equal to the memory address of variable i
". Now, the variable address stores the memory address of the int
variable i
.
int main(){
int a;
int &b;
b=&a;
a=10;
return 0;
}
When this code is run using a debugger I see:
a = 10 // the variable's value
b = 0x7fffffffe2fc // this is the address at which 'a' is stored.
Pointers are very powerful and you will start to use it more often once you understand it. Apart from the materials that others suggested for you to read I suggest use a debugger(gdb) and run a few programs with pointers in it and check every variable that you declared in the code. I understand things better when I have a visual picture of any problem and I think it might as well speed up your understanding of pointers.
First -int hi; here you declaring a integer variable named "hi"
Then -int *hi; here "hi" is a pointer which can point to a integer value
Note:int* hi and int *hi are syntactically same
精彩评论