C language learned by suffering
C language learned by suffering
The identity of variables that need to be &trained
Identity of &ed variables
In the previous section, we explained how to display the address of a variable.
In this case, the variable name was displayed with & in front of it.
This writing style was also used when using the scanf function in Chapter 6.
In other words, a variable with & is not only used to display an address.
It is a writing style used in a variety of places.
The identity of this variable with & is very simple.
Actually, & is an operator that finds the address of a variable.
Like + and ×, it is a symbol for performing some kind of calculation.
For any variable, the & operator can be used to find the address of the variable.
In other words, the & operator lets you know the number of the variable in memory.
In this case, the variable name was displayed with & in front of it.
This writing style was also used when using the scanf function in Chapter 6.
In other words, a variable with & is not only used to display an address.
It is a writing style used in a variety of places.
The identity of this variable with & is very simple.
Actually, & is an operator that finds the address of a variable.
Like + and ×, it is a symbol for performing some kind of calculation.
For any variable, the & operator can be used to find the address of the variable.
In other words, the & operator lets you know the number of the variable in memory.
Everything is value-passing
In the previous section, we explained that the & operator can be used to know the address of a variable.
But what on earth do we need to know the address of a variable for?
Actually, this has to do with the C function mechanism.
In Chapter 12, we discussed homebrew functions and variable scopes.
Here we explained that a number can be passed to a function through a mechanism called arguments.
However, it is only numbers that can be passed with this argument.
If you specify a variable when you call a function, you can use the
The value stored in the variable is copied to the actual argument of the called function.
This means that all data passed to the function in arguments are numeric.
This method of passing numerical values as arguments is sometimes called value passing.
It is important to note that even if a variable is specified as a real argument, it is the numeric value of its contents that is passed.
When a function receives a numerical value, it performs various calculations based on it and returns the result as a return value.
Normally this is not a problem, but if you want to directly change the contents of a variable, you are in trouble.
Because what is passed to the function is merely a copy of the contents of the variable, the
No matter how much you change that copy, it has no effect on the calling variable.
That way, the function knows the address of the caller's variable, i.e., its number in memory, and it can use the
If you rewrite the memory of that number, you can rewrite the caller's variable.
In other words, this is why we need to know the address of a variable.
But what on earth do we need to know the address of a variable for?
Actually, this has to do with the C function mechanism.
In Chapter 12, we discussed homebrew functions and variable scopes.
Here we explained that a number can be passed to a function through a mechanism called arguments.
However, it is only numbers that can be passed with this argument.
If you specify a variable when you call a function, you can use the
The value stored in the variable is copied to the actual argument of the called function.
This means that all data passed to the function in arguments are numeric.
This method of passing numerical values as arguments is sometimes called value passing.
Keywords.
[Passing of value]
A method of passing information to a function as a simple number.
It is important to note that even if a variable is specified as a real argument, it is the numeric value of its contents that is passed.
When a function receives a numerical value, it performs various calculations based on it and returns the result as a return value.
Normally this is not a problem, but if you want to directly change the contents of a variable, you are in trouble.
Because what is passed to the function is merely a copy of the contents of the variable, the
No matter how much you change that copy, it has no effect on the calling variable.
So, we use the & operator to find the address and pass the numeric value of that address.
That way, the function knows the address of the caller's variable, i.e., its number in memory, and it can use the
If you rewrite the memory of that number, you can rewrite the caller's variable.
In other words, this is why we need to know the address of a variable.
pass by reference (e.g. to a friend)
In contrast to pass-by-value, some languages have a function called pass-by-reference.
This is a function that automatically handles the process of passing an address.
In C, only value passing is possible.
Passing an address is sometimes conventionally referred to as passing by reference.
This is a function that automatically handles the process of passing an address.
In C, only value passing is possible.
Passing an address is sometimes conventionally referred to as passing by reference.
Reason for & in scanf function
Given what I explained in the previous section, you can see why the scanf function adds &.
The scanf function takes input from the keyboard and stores it in a variable.
However, as explained in the previous section, the C language allows only value passing.
In other words, only a copy of the value stored in the variable can be passed to the function.
This makes it impossible to store new values in variables.
In this case, you can pass the address of the variable as a number, as explained in the previous section.
function can store data at that address.
This is the reason for the & on variables in the scanf function.
What is questionable, however, is that when entering a string, you did not prefix the array name with &.
This is because, as explained in the previous section, the array name represents the address of the first element in the array.
Therefore, the & is unnecessary because the location of the array can be determined by passing the array name.
In other words, in a sense, it is sufficient to specify the address of the array even if it is not the array name.
For example, the following will allow input without an array name.
The result of executing this program will be as follows
This program simply specifies the address of element number 0 instead of the array name.
Both mean exactly the same thing, so there is no problem.
Moreover, you can even have the input come from the middle of the array by doing the following
The result of executing this program will be as follows
In this program, the DRAGON string is assigned to the array in the initialization phase.
In other words, characters are already assigned to array numbers 0 through 5.
So, if you enter the scanf function with the address of the sixth element
Since the string is input from element 6, it is combined with the string from the beginning.
In other words, if you're only passing the array name, you're certainly not putting an & on the appearance of the array.
What you are actually doing is exactly the same as specifying a variable with &.
The scanf function takes input from the keyboard and stores it in a variable.
However, as explained in the previous section, the C language allows only value passing.
In other words, only a copy of the value stored in the variable can be passed to the function.
This makes it impossible to store new values in variables.
In this case, you can pass the address of the variable as a number, as explained in the previous section.
function can store data at that address.
This is the reason for the & on variables in the scanf function.
What is questionable, however, is that when entering a string, you did not prefix the array name with &.
This is because, as explained in the previous section, the array name represents the address of the first element in the array.
Therefore, the & is unnecessary because the location of the array can be determined by passing the array name.
In other words, in a sense, it is sufficient to specify the address of the array even if it is not the array name.
For example, the following will allow input without an array name.
source code
#include <stdio.h>
int main(void)
{
char str[256];
scanf("%s", &str[0]); /* address of element 0 */
printf("%s\n", str);
return 0;
}
The result of executing this program will be as follows
Execution Result
MARIO String entered from keyboard
MARIO
MARIO
This program simply specifies the address of element number 0 instead of the array name.
Both mean exactly the same thing, so there is no problem.
Moreover, you can even have the input come from the middle of the array by doing the following
Source code
#include <stdio.h>
int main(void)
{
char str[256] = "DRAGON";
scanf("%s", &str[6]); /* address of element 6 */
printf("%s\n", str);
return 0;
}
The result of executing this program will be as follows
Execution Result
QUEST String entered from keyboard
DRAGONQUEST
DRAGONQUEST
In this program, the DRAGON string is assigned to the array in the initialization phase.
In other words, characters are already assigned to array numbers 0 through 5.
So, if you enter the scanf function with the address of the sixth element
Since the string is input from element 6, it is combined with the string from the beginning.
In other words, if you're only passing the array name, you're certainly not putting an & on the appearance of the array.
What you are actually doing is exactly the same as specifying a variable with &.
About this Site
The C language (bitter C), which is learned by suffering, is
This is the definitive C language introductory site.
It systematically explains the basic functions of the C language and
It is as complete as or better than any book on the market.