0% found this document useful (0 votes)
9 views79 pages

What Is C Programming

C is a general-purpose programming language created by Dennis Ritchie in 1972, known for its speed and versatility, especially in relation to UNIX. Learning C facilitates understanding of other programming languages due to similar syntax, and it is foundational in computer science. The document also covers key concepts such as variables, data types, format specifiers, and basic programming constructs in C.

Uploaded by

adityakr56564
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
9 views79 pages

What Is C Programming

C is a general-purpose programming language created by Dennis Ritchie in 1972, known for its speed and versatility, especially in relation to UNIX. Learning C facilitates understanding of other programming languages due to similar syntax, and it is foundational in computer science. The document also covers key concepts such as variables, data types, format specifiers, and basic programming constructs in C.

Uploaded by

adityakr56564
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

What is C?

C is a general-purpose programming language created by Dennis Ritchie at the


Bell Laboratories in 1972.

It is a very popular language, despite being old. The main reason for its
popularity is because it is a fundamental language in the field of computer
science.

C is strongly associated with UNIX, as it was developed to write the UNIX


operating system.

Why Learn C?
• It is one of the most popular programming language in the world
• If you know C, you will have no problem learning other popular
programming languages such as Java, Python, C++, C#, etc, as the
syntax is similar
• C is very fast, compared to other programming languages,
like Java and Python
• C is very versatile; it can be used in both applications and technologies

Difference between C and C++


• C++ was developed as an extension of C, and both languages have
almost the same syntax

• The main difference between C and C++ is that C++ support classes and
objects, while C does not

#include <stdio.h>
int main() {
printf("Hello World!");
return 0;
}
Example explained
Line 1: #include <stdio.h> is a header file library that lets us work with input
and output functions, such as printf() (used in line 4). Header files add
functionality to C programs.

Don't worry if you don't understand how #include <stdio.h> works. Just think of
it as something that (almost) always appears in your program.

Line 2: A blank line. C ignores white space. But we use it to make the code
more readable.

Line 3: Another thing that always appear in a C program, is main(). This is


called a function. Any code inside its curly brackets {} will be executed.

Line 4: printf() is a function used to output/print text to the screen. In our


example it will output "Hello World!".

Note that: Every C statement ends with a semicolon ;

Note: The body of int main() could also been written as:
int main(){printf("Hello World!");return 0;}

Remember: The compiler ignores white spaces. However, multiple lines makes
the code more readable.

Line 5: return 0 ends the main() function.

Line 6: Do not forget to add the closing curly bracket } to actually end the main
function.

Statements
A computer program is a list of "instructions" to be "executed" by a computer.

In a programming language, these programming instructions are


called statements.

The following statement "instructs" the compiler to print the text "Hello World"
to the screen:

Example
printf("Hello World!");
It is important that you end the statement with a semicolon ;

If you forget the semicolon (;), an error will occur and the program will not run:

Output (Print Text)


To output values or print text in C, you can use the printf() function:

Example
#include <stdio.h>

int main() {
printf("Hello World!");
return 0;
}

Double Quotes
When you are working with text, it must be wrapped inside double quotations
marks "".

If you forget the double quotes, an error occurs:

Example
printf("This sentence will work!");

printf(This sentence will produce an error.);

Many printf Functions


You can use as many printf() functions as you want. However, note that it
does not insert a new line at the end of the output:
Example
#include <stdio.h>

int main() {
printf("Hello World!");
printf("I am learning C.");
printf("And it is awesome!");
return 0;
}

New Lines
To insert a new line, you can use the \n character:

Example
#include <stdio.h>

int main() {
printf("Hello World!\n");
printf("I am learning C.");
return 0;
}

Tip: Two \n characters after each other will create a blank line:

Example
#include <stdio.h>

int main() {
printf("Hello World!\n\n");
printf("I am learning C.");
return 0;
}

you can also output multiple lines with a single printf() function. However, this
could make the code harder to read:
Example
#include <stdio.h>

int main() {
printf("Hello World!\nI am learning C.\nAnd it is awesome!");
return 0

}
Tip: Two \n characters after each other will create a blank line:

Example
#include <stdio.h>

int main() {
printf("Hello World!\n\n");
printf("I am learning C.");
return 0;
}

What is \n exactly?
The newline character (\n) is called an escape sequence, and it forces the
cursor to change its position to the beginning of the next line on the screen.
This results in a new line.

Examples of other valid escape sequences are:

Escape Sequence Description

\t Creates a horizontal tab

\\ Inserts a backslash character (\)


\" Inserts a double quote character

Comments in C
Comments can be used to explain code, and to make it more readable. It can
also be used to prevent execution when testing alternative code.

Comments can be singled-lined or multi-lined.

Single-line Comments
Single-line comments start with two forward slashes (//).

Any text between // and the end of the line is ignored by the compiler (will not
be executed).

This example uses a single-line comment before a line of code:

Example
// This is a comment
printf("Hello World!");

C Multi-line Comments
Multi-line comments start with /* and ends with */.

Any text between /* and */ will be ignored by the compiler:


Example
/* The code below will print the words Hello World!
to the screen, and it is amazing */
printf("Hello World!");

Try it Yourself »

C Variables
ariables are containers for storing data values, like numbers and characters.

In C, there are different types of variables (defined with different keywords),


for example:

• int - stores integers (whole numbers), without decimals, such as 123 or -


123
• float - stores floating point numbers, with decimals, such as 19.99 or -
19.99
• char - stores single characters, such as 'a' or 'B'. Char values are
surrounded by single quotes

Declaring (Creating) Variables


To create a variable, specify the type and assign it a value:

Syntax
type variableName = value;

here type is one of C types (such as int), and variableName is the name of the
variable (such as x or myName). The equal sign is used to assign a value to
the variable.

So, to create a variable that should store a number, look at the following
example:
Example
Create a variable called myNum of type int and assign the value 15 to it:

int myNum = 15;

Example
// Declare a variable
int myNum;

// Assign a value to the variable


myNum = 15;

Output Variables
You learned from the output chapter that you can output values/print text with
the printf() function:

Example
printf("Hello World!");

Try it Yourself »

In many other programming languages (like Python, Java, and C++), you would
normally use a print function to display the value of a variable. However, this
is not possible in C:

Example
int myNum = 15;
printf(myNum); // Nothing happens

To output variables in C, you must get familiar with something called "format
specifiers", which you will learn about in the next chapter.
C Format Specifiers

Format Specifiers
Format specifiers are used together with the printf() function to tell the
compiler what type of data the variable is storing. It is basically
a placeholder for the variable value.

A format specifier starts with a percentage sign %, followed by a character.

For example, to output the value of an int variable, use the format
specifier %d surrounded by double quotes (""), inside the printf() function:

Example
int myNum = 15;
printf("%d", myNum); // Outputs 15

Try it Yourself »

To print other types, use %c for char and %f for float:

Example
// Create variables
int myNum = 15; // Integer (whole number)
float myFloatNum = 5.99; // Floating point number
char myLetter = 'D'; // Character

// Print variables
printf("%d\n", myNum);
printf("%f\n", myFloatNum);
printf("%c\n", myLetter);

Try it Yourself »

To combine both text and a variable, separate them with a comma inside
the printf() function:
Example
int myNum = 15;
printf("My favorite number is: %d", myNum);

Try it Yourself »

To print different types in a single printf() function, you can use the following:

Example
int myNum = 15;
char myLetter = 'D';
printf("My number is %d and my letter is %c", myNum, myLetter);

Try it Yourself »

You will learn more about Data Types in a later chapter.

C Variable Values
Change Variable Values
If you assign a new value to an existing variable, it will overwrite the previous
value:

Example
int myNum = 15; // myNum is 15
myNum = 10; // Now myNum is 10

Try it Yourself »

You can also assign the value of one variable to another:

Example
int myNum = 15;
int myOtherNum = 23;

// Assign the value of myOtherNum (23) to myNum


myNum = myOtherNum;

// myNum is now 23, instead of 15


printf("%d", myNum);

Try it Yourself »

Or copy values to empty variables:

Example
// Create a variable and assign the value 15 to it
int myNum = 15;

// Declare a variable without assigning it a value


int myOtherNum;

// Assign the value of myNum to myOtherNum


myOtherNum = myNum;

// myOtherNum now has 15 as a value


printf("%d", myOtherNum);

Try it Yourself »

Add Variables Together


To add a variable to another variable, you can use the + operator:

Example
int x = 5;
int y = 6;
int sum = x + y;
printf("%d", sum);
C Declare Multiple Variables
Declare Multiple Variables
To declare more than one variable of the same type, use a comma-
separated list:

Example
int x = 5, y = 6, z = 50;
printf("%d", x + y + z);

Try it Yourself »

You can also assign the same value to multiple variables of the same type:

Example
int x, y, z;
x = y = z = 50;
printf("%d", x + y + z);

C Variable Names (Identifiers)


❮ PreviousNext ❯

C Variable Names
All C variables must be identified with unique names.

These unique names are called identifiers.

Identifiers can be short names (like x and y) or more descriptive names (age,
sum, totalVolume).
Note: It is recommended to use descriptive names in order to create
understandable and maintainable code:

Example
// Good variable name
int minutesPerHour = 60;

// OK, but not so easy to understand what m actually is


int m = 60;

Try it Yourself »

The general rules for naming variables are:

• Names can contain letters, digits and underscores


• Names must begin with a letter or an underscore (_)
• Names are case sensitive (myVar and myvar are different variables)
• Names cannot contain whitespaces or special characters like !, #, %, etc.
• Reserved words (such as int) cannot be used as names

C Variables - Real Life Example


C Data Types
❮ PreviousNext ❯

Data Types
As explained in the Variables chapter, a variable in C must be a specified data
type, and you must use a format specifier inside the printf() function to
display it:
Example
// Create variables
int myNum = 5; // Integer (whole number)
float myFloatNum = 5.99; // Floating point number
char myLetter = 'D'; // Character

// Print variables
printf("%d\n", myNum);
printf("%f\n", myFloatNum);
printf("%c\n", myLetter);

Try it Yourself »

Basic Data Types


The data type specifies the size and type of information the variable will store.

In this tutorial, we will focus on the most basic ones:

Data Type Size Description

int 2 or 4 bytes Stores whole numbers, without decimals

float 4 bytes Stores fractional numbers, containing one or more decim

double 8 bytes Stores fractional numbers, containing one or more decim

char 1 byte Stores a single character/letter/number, or ASCII values


Basic Format Specifiers
There are different format specifiers for each data type. Here are some of them:

Format Specifier Data Type

%d or %i int

%f or %F float

%lf double

%c char

%s Used for strings (text), which you will learn more about

Real-Life Example
Often in our examples, we simplify variable names to match their data type
(myInt or myNum for int types, myChar for char types, and so on). This is done
to avoid confusion.

However, if you want a real-life example on how variables can be used, take a
look at the following, where we have made a program that stores different data
of a college student:
Example
// Student data
int studentID = 15;
int studentAge = 23;
float studentFee = 75.25;
char studentGrade = 'B';

// Print variables
printf("Student id: %d\n", studentID);
printf("Student age: %d\n", studentAge);
printf("Student fee: %f\n", studentFee);
printf("Student grade: %c", studentGrade);

Try it Yourself »

Calculate the Area of a Rectangle


In this real-life example, we create a program to calculate the area of a
rectangle (by multiplying the length and width):

Example
// Create integer variables
int length = 4;
int width = 6;
int area;

// Calculate the area of a rectangle


area = length * width;

// Print the variables


printf("Length is: %d\n", length);
printf("Width is: %d\n", width);
printf("Area of the rectangle is: %d", area);

Try it Yourself »
C Decimal Precision
Set Decimal Precision
You have probably already noticed that if you print a floating point number, the
output will show many digits after the decimal point:

Example
float myFloatNum = 3.5;
double myDoubleNum = 19.99;

printf("%f\n", myFloatNum); // Outputs 3.500000


printf("%lf", myDoubleNum); // Outputs 19.990000

Try it Yourself »

If you want to remove the extra zeros (set decimal precision), you can use a
dot (.) followed by a number that specifies how many digits that should be
shown after the decimal point:

Example
float myFloatNum = 3.5;

printf("%f\n", myFloatNum); // Default will show 6 digits after the


decimal point
printf("%.1f\n", myFloatNum); // Only show 1 digit
printf("%.2f\n", myFloatNum); // Only show 2 digits
printf("%.4f", myFloatNum); // Only show 4 digits

Try it Yourself »
C Data Types - Real-Life
Examples
❮ PreviousNext ❯

Real-Life Example
Here's a real-life example of using different data types, to calculate and output
the total cost of a number of items:

Example
// Create variables of different data types
int items = 50;
float cost_per_item = 9.99;
float total_cost = items * cost_per_item;
char currency = '$';

// Print variables
printf("Number of items: %d\n", items);
printf("Cost per item: %.2f %c\n", cost_per_item, currency);
printf("Total cost = %.2f %c\n", total_cost, currency);

C Type Conversion
❮ PreviousNext ❯

Type Conversion
Sometimes, you have to convert the value of one data type to another type.
This is known as type conversion.

For example, if you try to divide two integers, 5 by 2, you would expect the
result to be 2.5. But since we are working with integers (and not floating-point
values), the following example will just output 2:

Example
int x = 5;
int y = 2;
int sum = 5 / 2;

printf("%d", sum); // Outputs 2

Try it Yourself »

To get the right result, you need to know how type conversion works.

There are two types of conversion in C:

• Implicit Conversion (automatically)


• Explicit Conversion (manually)

Implicit Conversion
Implicit conversion is done automatically by the compiler when you assign a
value of one type to another.

For example, if you assign an int value to a float type:

Example
// Automatic conversion: int to float
float myFloat = 9;

printf("%f", myFloat); // 9.000000

Try it Yourself »
As you can see, the compiler automatically converts the int value 9 to a float
value of 9.000000.

This can be risky, as you might lose control over specific values in certain
situations.

Especially if it was the other way around - the following example automatically
converts the float value 9.99 to an int value of 9:

Example
// Automatic conversion: float to int
int myInt = 9.99;

printf("%d", myInt); // 9

Try it Yourself »

What happened to .99? We might want that data in our program! So be careful.
It is important that you know how the compiler work in these situations, to
avoid unexpected results.

As another example, if you divide two integers: 5 by 2, you know that the sum
is 2.5. And as you know from the beginning of this page, if you store the sum as
an integer, the result will only display the number 2. Therefore, it would be
better to store the sum as a float or a double, right?

Example
float sum = 5 / 2;

printf("%f", sum); // 2.000000

Try it Yourself »

Why is the result 2.00000 and not 2.5? Well, it is because 5 and 2 are still
integers in the division. In this case, you need to manually convert the integer
values to floating-point values. (see below).

Explicit Conversion
Explicit conversion is done manually by placing the type in parentheses () in
front of the value.

Considering our problem from the example above, we can now get the right
result:

Example
// Manual conversion: int to float
float sum = (float) 5 / 2;

printf("%f", sum); // 2.500000

Try it Yourself »

You can also place the type in front of a variable:

Example
int num1 = 5;
int num2 = 2;
float sum = (float) num1 / num2;

printf("%f", sum); // 2.500000

Try it Yourself »

And since you learned about "decimal precision" in the previous chapter, you
could make the output even cleaner by removing the extra zeros (if you like):

Example
int num1 = 5;
int num2 = 2;
float sum = (float) num1 / num2;

printf("%.1f", sum); // 2.5

Try it Yourself »

Real-Life Example
Here's a real-life example where we create a program to calculate the
percentage of a user's score in relation to the maximum score in a game:

Example
// Set the maximum possible score in the game to 500
int maxScore = 500;

// The actual score of the user


int userScore = 420;

/* Calculate the percantage of the user's score in relation to the maximum


available score.
Convert userScore to float to make sure that the division is accurate */
float percentage = (float) userScore / maxScore * 100.0;

// Print the percentage


printf("User's percentage is %.2f", percentage);

Try it Yourself »

C Constants
❮ PreviousNext ❯

Constants
If you don't want others (or yourself) to change existing variable values, you
can use the const keyword.

This will declare the variable as "constant", which


means unchangeable and read-only:

Example
const int myNum = 15; // myNum will always be 15
myNum = 10; // error: assignment of read-only variable 'myNum'
Try it Yourself »

You should always declare the variable as constant when you have values that
are unlikely to change:

Example
const int minutesPerHour = 60;
const float PI = 3.14;

Try it Yourself »

Notes On Constants
When you declare a constant variable, it must be assigned with a value:

Example
Like this:

const int minutesPerHour = 60;

This however, will not work:

const int minutesPerHour;


minutesPerHour = 60; // error

Try it Yourself »

Good Practice
Another thing about constant variables, is that it is considered good practice to
declare them with uppercase.

It is not required, but useful for code readability and common for C
programmers:
Example
const int BIRTHYEAR = 1980;

C Operators
❮ PreviousNext ❯

Operators
Operators are used to perform operations on variables and values.

In the example below, we use the + operator to add together two values:

Example
int myNum = 100 + 50;

Try it Yourself »

Although the + operator is often used to add together two values, like in the
example above, it can also be used to add together a variable and a value, or a
variable and another variable:

Example
int sum1 = 100 + 50; // 150 (100 + 50)
int sum2 = sum1 + 250; // 400 (150 + 250)
int sum3 = sum2 + sum2; // 800 (400 + 400)

Try it Yourself »

C divides the operators into the following groups:

• Arithmetic operators
• Assignment operators
• Comparison operators
• Logical operators
• Bitwise operators

Arithmetic Operators
Arithmetic operators are used to perform common mathematical operations.

Operator Name Description

+ Addition Adds together two values

- Subtraction Subtracts one value from another

* Multiplication Multiplies two values

/ Division Divides one value by another

% Modulus Returns the division remainder

++ Increment Increases the value of a variable by 1

-- Decrement Decreases the value of a variable by 1


Assignment Operators
Assignment operators are used to assign values to variables.

In the example below, we use the assignment operator (=) to assign the
value 10 to a variable called x:

Example
int x = 10;

Try it Yourself »

The addition assignment operator (+=) adds a value to a variable:

Example
int x = 10;
x += 5;

Try it Yourself »

A list of all assignment operators:

Operator Example

= x=5

+= x += 3

-= x -= 3
*= x *= 3

/= x /= 3

%= x %= 3

&= x &= 3

|= x |= 3

^= x ^= 3

>>= x >>= 3

<<= x <<= 3

Comparison Operators
Comparison operators are used to compare two values (or variables). This is
important in programming, because it helps us to find answers and make
decisions.

The return value of a comparison is either 1 or 0, which means true (1)


or false (0). These values are known as Boolean values, and you will learn
more about them in the Booleans and If..Else chapter.
In the following example, we use the greater than operator (>) to find out if 5
is greater than 3:

Example
int x = 5;
int y = 3;
printf("%d", x > y); // returns 1 (true) because 5 is greater than 3

Try it Yourself »

A list of all comparison operators:

Operator Name Example Description

== Equal to x == y Returns 1 if th

!= Not equal x != y Returns 1 if th

> Greater than x>y Returns 1 if th

< Less than x<y Returns 1 if th

>= Greater than or equal to x >= y Returns 1 if th

<= Less than or equal to x <= y Returns 1 if th


Logical Operators
You can also test for true or false values with logical operators.

Logical operators are used to determine the logic between variables or values:

Operator Name Example Description

&& Logical and x < 5 && x < 10 Returns 1 if both s

|| Logical or x < 5 || x < 4 Returns 1 if one o

! Logical not !(x < 5 && x < 10) Reverse the result

Sizeof Operator
The memory size (in bytes) of a data type or a variable can be found with
the sizeof operator:

Example
int myInt;
float myFloat;
double myDouble;
char myChar;

printf("%lu\n", sizeof(myInt));
printf("%lu\n", sizeof(myFloat));
printf("%lu\n", sizeof(myDouble));
printf("%lu\n", sizeof(myChar));
Try it Yourself »

Note that we use the %lu format specifer to print the result, instead of %d. It is
because the compiler expects the sizeof operator to return a long unsigned
int (%lu), instead of int (%d). On some computers it might work with %d, but it is
safer to use %lu.

Why Should I Know the Size of Data Types?


Using the right data type for the right purpose will save memory and improve
the performance of your program.

You will learn more about the sizeof operator later in this tutorial, and how to
use it in different scenarios.

C Booleans
❮ PreviousNext ❯

Booleans
Very often, in programming, you will need a data type that can only have one of
two values, like:

• YES / NO
• ON / OFF
• TRUE / FALSE

For this, C has a bool data type, which is known as booleans.

Booleans represent values that are either true or false.

Boolean Variables
In C, the bool type is not a built-in data type, like int or char.

It was introduced in C99, and you must import the following header file to use
it:

#include <stdbool.h>

A boolean variable is declared with the bool keyword and can only take the
values true or false:

bool isProgrammingFun = true;


bool isFishTasty = false;

Before trying to print the boolean variables, you should know that boolean
values are returned as integers:

• 1 (or any other number that is not 0) represents true


• 0 represents false

Therefore, you must use the %d format specifier to print a boolean value:

Example
// Create boolean variables
bool isProgrammingFun = true;
bool isFishTasty = false;

// Return boolean values


printf("%d", isProgrammingFun); // Returns 1 (true)
printf("%d", isFishTasty); // Returns 0 (false)

Try it Yourself »

However, it is more common to return a boolean value by comparing values


and variables.

Comparing Values and Variables


Comparing values are useful in programming, because it helps us to find
answers and make decisions.
For example, you can use a comparison operator, such as the greater than (>)
operator, to compare two values:

Example
printf("%d", 10 > 9); // Returns 1 (true) because 10 is greater than 9

Try it Yourself »

From the example above, you can see that the return value is a boolean value
(1).

You can also compare two variables:

Example
int x = 10;
int y = 9;
printf("%d", x > y);

Try it Yourself »

In the example below, we use the equal to (==) operator to compare different
values:

Example
printf("%d", 10 == 10); // Returns 1 (true), because 10 is equal to 10
printf("%d", 10 == 15); // Returns 0 (false), because 10 is not equal to
15
printf("%d", 5 == 55); // Returns 0 (false) because 5 is not equal to 55

Try it Yourself »

You are not limited to only compare numbers. You can also compare boolean
variables, or even special structures, like arrays (which you will learn more
about in a later chapter):

Example
bool isHamburgerTasty = true;
bool isPizzaTasty = true;
// Find out if both hamburger and pizza is tasty
printf("%d", isHamburgerTasty == isPizzaTasty);

Try it Yourself »

Remember to include the <stdbool.h> header file when working


with bool variables.

Real Life Example


Let's think of a "real life example" where we need to find out if a person is old
enough to vote.

In the example below, we use the >= comparison operator to find out if the age
(25) is greater than OR equal to the voting age limit, which is set to 18:

Example
int myAge = 25;
int votingAge = 18;

printf("%d", myAge >= votingAge); // Returns 1 (true), meaning 25 year


olds are allowed to vote!

Try it Yourself »

Cool, right? An even better approach (since we are on a roll now), would be to
wrap the code above in an if...else statement, so we can perform different
actions depending on the result:

Example
Output "Old enough to vote!" if myAge is greater than or equal to 18. Otherwise
output "Not old enough to vote.":

int myAge = 25;


int votingAge = 18;

if (myAge >= votingAge) {


printf("Old enough to vote!");
} else {
printf("Not old enough to vote.");
}

Try it Yourself »

Booleans are the basis for all comparisons and conditions.

You will learn more about conditions (if...else) in the next chapter.

C If ... Else
Conditions and If Statements
You have already learned that C supports the usual logical conditions from
mathematics:

• Less than: a < b


• Less than or equal to: a <= b
• Greater than: a > b
• Greater than or equal to: a >= b
• Equal to a == b
• Not Equal to: a != b

You can use these conditions to perform different actions for different decisions.

C has the following conditional statements:

• Use if to specify a block of code to be executed, if a specified condition


is true
• Use else to specify a block of code to be executed, if the same condition
is false
• Use else if to specify a new condition to test, if the first condition
is false
• Use switch to specify many alternative blocks of code to be executed

The if Statement
Use the if statement to specify a block of code to be executed if a condition
is true.
Syntax
if (condition) {
// block of code to be executed if the condition is true
}

Note that if is in lowercase letters. Uppercase letters (If or IF) will generate an
error.

In the example below, we test two values to find out if 20 is greater than 18. If
the condition is true, print some text:

Example
if (20 > 18) {
printf("20 is greater than 18");
}

Try it Yourself »

We can also test variables:

Example
int x = 20;
int y = 18;
if (x > y) {
printf("x is greater than y");
}

Try it Yourself »

Example explained

In the example above we use two variables, x and y, to test whether x is


greater than y (using the > operator). As x is 20, and y is 18, and we know that
20 is greater than 18, we print to the screen that "x is greater than y".
C Else
❮ PreviousNext ❯

The else Statement


Use the else statement to specify a block of code to be executed if the condition
is false.

Syntax
if (condition) {
// block of code to be executed if the condition is true
} else {
// block of code to be executed if the condition is false
}

Example
int time = 20;
if (time < 18) {
printf("Good day.");
} else {
printf("Good evening.");
}
// Outputs "Good evening."

Try it Yourself »

Example explained

In the example above, time (20) is greater than 18, so the condition is false.
Because of this, we move on to the else condition and print to the screen "Good
evening". If the time was less than 18, the program would print "Good day".
C Else If
The else if Statement
Use the else if statement to specify a new condition if the first condition
is false.

Syntax
if (condition1) {
// block of code to be executed if condition1 is true
} else if (condition2) {
// block of code to be executed if the condition1 is false and
condition2 is true
} else {
// block of code to be executed if the condition1 is false and
condition2 is false
}

Example
int time = 22;
if (time < 10) {
printf("Good morning.");
} else if (time < 20) {
printf("Good day.");
} else {
printf("Good evening.");
}
// Outputs "Good evening."

Try it Yourself »

Example explained

In the example above, time (22) is greater than 10, so the first
condition is false. The next condition, in the else if statement, is also false, so
we move on to the else condition since condition1 and condition2 is
both false - and print to the screen "Good evening".

However, if the time was 14, our program would print "Good day."
C Short Hand If Else
Short Hand If...Else (Ternary Operator)
There is also a short-hand if else, which is known as the ternary
operator because it consists of three operands. It can be used to replace
multiple lines of code with a single line. It is often used to replace simple if else
statements:

Syntax
variable = (condition) ? expressionTrue : expressionFalse;

Instead of writing:

Example
int time = 20;
if (time < 18) {
printf("Good day.");
} else {
printf("Good evening.");
}

Try it Yourself »

You can simply write:

Example
int time = 20;
(time < 18) ? printf("Good day.") : printf("Good evening.");

Try it Yourself »

It is completely up to you if you want to use the traditional if...else statement or


the ternary operator.
C If ... Else - Real Life Examples
Real-Life Examples
This example shows how you can use if..else to "open a door" if the user
enters the correct code:

Example
int doorCode = 1337;

if (doorCode == 1337) {
printf("Correct code.\nThe door is now open.");
} else {
printf("Wrong code.\nThe door remains closed.");
}

Try it Yourself »

This example shows how you can use if..else to find out if a number is positive
or negative:

Example
int myNum = 10; // Is this a positive or negative number?

if (myNum > 0) {
printf("The value is a positive number.");
} else if (myNum < 0) {
printf("The value is a negative number.");
} else {
printf("The value is 0.");
}

Try it Yourself »

Find out if a person is old enough to vote:


Example
int myAge = 25;
int votingAge = 18;

if (myAge >= votingAge) {


printf("Old enough to vote!");
} else {
printf("Not old enough to vote.");
}

Try it Yourself »

Find out if a number is even or odd:

Example
int myNum = 5;

if (myNum % 2 == 0) {
printf("%d is even.\n", myNum);
} else {
printf("%d is odd.\n", myNum);
}

Try it Yourself »

C Switch
Switch Statement
Instead of writing many if..else statements, you can use the switch statement.

The switch statement selects one of many code blocks to be executed:

Syntax
switch(expression) {
case x:
// code block
break;
case y:
// code block
break;
default:
// code block
}

This is how it works:

• The switch expression is evaluated once


• The value of the expression is compared with the values of each case
• If there is a match, the associated block of code is executed
• The break statement breaks out of the switch block and stops the
execution
• The default statement is optional, and specifies some code to run if there
is no case match

The example below uses the weekday number to calculate the weekday name:

Example
int day = 4;

switch (day) {
case 1:
printf("Monday");
break;
case 2:
printf("Tuesday");
break;
case 3:
printf("Wednesday");
break;
case 4:
printf("Thursday");
break;
case 5:
printf("Friday");
break;
case 6:
printf("Saturday");
break;
case 7:
printf("Sunday");
break;
}

// Outputs "Thursday" (day 4)

Try it Yourself »

The break Keyword


When C reaches a break keyword, it breaks out of the switch block.

This will stop the execution of more code and case testing inside the block.

When a match is found, and the job is done, it's time for a break. There is no
need for more testing.

A break can save a lot of execution time because it "ignores" the execution of
all the rest of the code in the switch block.

The default Keyword


The default keyword specifies some code to run if there is no case match:

Example
int day = 4;

switch (day) {
case 6:
printf("Today is Saturday");
break;
case 7:
printf("Today is Sunday");
break;
default:
printf("Looking forward to the Weekend");
}

// Outputs "Looking forward to the Weekend"

Try it Yourself »

Note: The default keyword must be used as the last statement in the switch,
and it does not need a break.

C While Loop
Loops
Loops can execute a block of code as long as a specified condition is reached.

Loops are handy because they save time, reduce errors, and they make code
more readable.

While Loop
The while loop loops through a block of code as long as a specified condition
is true:

Syntax
while (condition) {
// code block to be executed
}

In the example below, the code in the loop will run, over and over again, as
long as a variable (i) is less than 5:
Example
int i = 0;

while (i < 5) {
printf("%d\n", i);
i++;
}

Try it Yourself »

Note: Do not forget to increase the variable used in the condition (i++),
otherwise the loop will never end!

C Do/While Loop
❮ PreviousNext ❯

The Do/While Loop


The do/while loop is a variant of the while loop. This loop will execute the code
block once, before checking if the condition is true, then it will repeat the loop
as long as the condition is true.

Syntax
do {
// code block to be executed
}
while (condition);

The example below uses a do/while loop. The loop will always be executed at
least once, even if the condition is false, because the code block is executed
before the condition is tested:
Example
int i = 0;

do {
printf("%d\n", i);
i++;
}
while (i < 5);

Try it Yourself »

Do not forget to increase the variable used in the condition, otherwise the loop
will never end!

C While Loops - Real-Life


Examples
Real-Life Examples
To demonstrate a practical example of the while loop, we have created a
simple "countdown" program:

Example
int countdown = 3;

while (countdown > 0) {


printf("%d\n", countdown);
countdown--;
}

printf("Happy New Year!!\n");

Try it Yourself »
To demonstrate a practical example of the while loop combined with an if else
statement, let's say we play a game of Yatzy:

Example
Print "Yatzy!" If the dice number is 6:

int dice = 1;

while (dice <= 6) {


if (dice < 6) {
printf("No Yatzy\n");
} else {
printf("Yatzy!\n");
}
dice = dice + 1;
}

Try it Yourself »

If the loop passes the values ranging from 1 to 5, it prints "No Yatzy".
Whenever it passes the value 6, it prints "Yatzy!".

C For Loop
For Loop
When you know exactly how many times you want to loop through a block of
code, use the for loop instead of a while loop:

Syntax
for (statement 1; statement 2; statement 3) {
// code block to be executed
}

Statement 1 is executed (one time) before the execution of the code block.

Statement 2 defines the condition for executing the code block.


Statement 3 is executed (every time) after the code block has been executed.

The example below will print the numbers 0 to 4:

Example
int i;

for (i = 0; i < 5; i++) {


printf("%d\n", i);
}

Try it Yourself »

Example explained

Statement 1 sets a variable before the loop starts (int i = 0).

Statement 2 defines the condition for the loop to run (i must be less than 5). If
the condition is true, the loop will start over again, if it is false, the loop will
end.

Statement 3 increases a value (i++) each time the code block in the loop has
been executed.

C Nested Loops
Real-Life Examples
Use a for loop to only print even values between 0 and 10:

Example
for (i = 0; i <= 10; i = i + 2) {
printf("%d\n", i);
}

Try it Yourself »
To demonstrate another practical example of the for loop, let's create a
program that prints the multiplication table for a specified number:

Example
int number = 2;
int i;

// Print the multiplication table for the number 2


for (i = 1; i <= 10; i++) {
printf("%d x %d = %d\n", number, i, number * i);
}

return 0;

Nested Loops
It is also possible to place a loop inside another loop. This is called a nested
loop.

The "inner loop" will be executed one time for each iteration of the "outer loop":

Example
int i, j;

// Outer loop
for (i = 1; i <= 2; ++i) {
printf("Outer: %d\n", i); // Executes 2 times

// Inner loop
for (j = 1; j <= 3; ++j) {
printf(" Inner: %d\n", j); // Executes 6 times (2 * 3)
}
}

Try it Yourself »
C Break and Continue
❮ PreviousNext ❯

Break
You have already seen the break statement used in an earlier chapter of this
tutorial. It was used to "jump out" of a switch statement.

The break statement can also be used to jump out of a loop.

This example jumps out of the for loop when i is equal to 4:

Example
int i;

for (i = 0; i < 10; i++) {


if (i == 4) {
break;
}
printf("%d\n", i);
}

Try it Yourself »

Continue
The continue statement breaks one iteration (in the loop), if a specified condition
occurs, and continues with the next iteration in the loop.

This example skips the value of 4:


Example
int i;

for (i = 0; i < 10; i++) {


if (i == 4) {
continue;
}
printf("%d\n", i);
}

Try it Yourself »

Break and Continue in While Loop


You can also use break and continue in while loops:

Break Example
int i = 0;

while (i < 10) {


if (i == 4) {
break;
}
printf("%d\n", i);
i++;
}

Continue Example
int i = 0;

while (i < 10) {


if (i == 4) {
i++;
continue;
}
printf("%d\n", i);
i++;
}
C Arrays
Arrays
Arrays are used to store multiple values in a single variable, instead of declaring
separate variables for each value.

To create an array, define the data type (like int) and specify the name of the
array followed by square brackets [].

To insert values to it, use a comma-separated list, inside curly braces:

int myNumbers[] = {25, 50, 75, 100};

We have now created a variable that holds an array of four integers.

Access the Elements of an Array


To access an array element, refer to its index number.

Array indexes start with 0: [0] is the first element. [1] is the second element,
etc.

This statement accesses the value of the first element [0] in myNumbers:

Example
int myNumbers[] = {25, 50, 75, 100};
printf("%d", myNumbers[0]);

// Outputs 25

Try it Yourself »
Change an Array Element
To change the value of a specific element, refer to the index number:

Example
myNumbers[0] = 33;

Example
int myNumbers[] = {25, 50, 75, 100};
myNumbers[0] = 33;

printf("%d", myNumbers[0]);

// Now outputs 33 instead of 25

Try it Yourself »

Loop Through an Array


You can loop through the array elements with the for loop.

The following example outputs all elements in the myNumbers array:

Example
int myNumbers[] = {25, 50, 75, 100};
int i;

for (i = 0; i < 4; i++) {


printf("%d\n", myNumbers[i]);
}

Try it Yourself »
Set Array Size
Another common way to create arrays, is to specify the size of the array, and
add elements later:

Example
// Declare an array of four integers:
int myNumbers[4];

// Add elements
myNumbers[0] = 25;
myNumbers[1] = 50;
myNumbers[2] = 75;
myNumbers[3] = 100;

Try it Yourself »

Using this method, you should know the number of array elements in
advance, in order for the program to store enough memory.

You are not able to change the size of the array after creation.

Get Array Size or Length


To get the size of an array, you can use the sizeof operator:

Example
int myNumbers[] = {10, 25, 50, 75, 100};
printf("%lu", sizeof(myNumbers)); // Prints 20

Try it Yourself »

Why did the result show 20 instead of 5, when the array contains 5 elements?

- It is because the sizeof operator returns the size of a type in bytes.


You learned from the Data Types chapter that an int type is usually 4 bytes, so
from the example above, 4 x 5 (4 bytes x 5 elements) = 20 bytes.

Knowing the memory size of an array is great when you are working with larger
programs that require good memory management.

But when you just want to find out how many elements an array has, you can
use the following formula (which divides the size of the array by the size of one
array element):

Example
int myNumbers[] = {10, 25, 50, 75, 100};
int length = sizeof(myNumbers) / sizeof(myNumbers[0]);

printf("%d", length); // Prints 5

Try it Yourself »

Making Better Loops


In the array loops section above, we wrote the size of the array in the loop
condition (i < 4). This is not ideal, since it will only work for arrays of a specified
size.

However, by using the sizeof formula from the example above, we can now
make loops that work for arrays of any size, which is more sustainable.

Instead of writing:

Example
int myNumbers[] = {25, 50, 75, 100};
int i;

for (i = 0; i < 4; i++) {


printf("%d\n", myNumbers[i]);
}
Try it Yourself »

It is better to write:

Example
int myNumbers[] = {25, 50, 75, 100};
int length = sizeof(myNumbers) / sizeof(myNumbers[0]);
int i;

for (i = 0; i < length; i++) {


printf("%d\n", myNumbers[i]);
}

Try it Yourself »

Real-Life Example
To demonstrate a practical example of using arrays, let's create a program that
calculates the average of different ages:

Example
// An array storing different ages
int ages[] = {20, 22, 18, 35, 48, 26, 87, 70};

float avg, sum = 0;


int i;

// Get the length of the array


int length = sizeof(ages) / sizeof(ages[0]);

// Loop through the elements of the array


for (int i = 0; i < length; i++) {
sum += ages[i];
}

// Calculate the average by dividing the sum by the length


avg = sum / length;
// Print the average
printf("The average age is: %.2f", avg);

Try it Yourself »

Multidimensional Arrays
In the previous chapter, you learned about arrays, which is also known
as single dimension arrays. These are great, and something you will use a lot
while programming in C. However, if you want to store data as a tabular form,
like a table with rows and columns, you need to get familiar
with multidimensional arrays.

A multidimensional array is basically an array of arrays.

Arrays can have any number of dimensions. In this chapter, we will introduce
the most common; two-dimensional arrays (2D).

Two-Dimensional Arrays
A 2D array is also known as a matrix (a table of rows and columns).

To create a 2D array of integers, take a look at the following example:

int matrix[2][3] = { {1, 4, 2}, {3, 6, 8} };

The first dimension represents the number of rows [2], while the second
dimension represents the number of columns [3]. The values are placed in row-
order, and can be visualized like this:
Access the Elements of a 2D Array
To access an element of a two-dimensional array, you must specify the index
number of both the row and column.

This statement accesses the value of the element in the first row
(0) and third column (2) of the matrix array.

Example
int matrix[2][3] = { {1, 4, 2}, {3, 6, 8} };

printf("%d", matrix[0][2]); // Outputs 2

Try it Yourself »

Remember that: Array indexes start with 0: [0] is the first element. [1] is the
second element, etc.

Change Elements in a 2D Array


To change the value of an element, refer to the index number of the element in
each of the dimensions:

The following example will change the value of the element in the first row
(0) and first column (0):
Example
int matrix[2][3] = { {1, 4, 2}, {3, 6, 8} };
matrix[0][0] = 9;

printf("%d", matrix[0][0]); // Now outputs 9 instead of 1

Try it Yourself »

Loop Through a 2D Array


To loop through a multi-dimensional array, you need one loop for each of the
array's dimensions.

The following example outputs all elements in the matrix array:

Example
int matrix[2][3] = { {1, 4, 2}, {3, 6, 8} };

int i, j;
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++) {
printf("%d\n", matrix[i][j]);
}
}

Try it Yourself »

C Strings
Strings
Strings are used for storing text/characters.

For example, "Hello World" is a string of characters.


Unlike many other programming languages, C does not have a String type to
easily create string variables. Instead, you must use the char type and create
an array of characters to make a string in C:

char greetings[] = "Hello World!";

Note that you have to use double quotes ("").

To output the string, you can use the printf() function together with the format
specifier %s to tell C that we are now working with strings:

Example
char greetings[] = "Hello World!";
printf("%s", greetings);

Try it Yourself »

Access Strings
Since strings are actually arrays in C, you can access a string by referring to its
index number inside square brackets [].

This example prints the first character (0) in greetings:

Example
char greetings[] = "Hello World!";
printf("%c", greetings[0]);

Try it Yourself »

Note that we have to use the %c format specifier to print a single character.

Modify Strings
To change the value of a specific character in a string, refer to the index
number, and use single quotes:

Example
char greetings[] = "Hello World!";
greetings[0] = 'J';
printf("%s", greetings);
// Outputs Jello World! instead of Hello World!

Try it Yourself »

Loop Through a String


You can also loop through the characters of a string, using a for loop:

Example
char carName[] = "Volvo";
int i;

for (i = 0; i < 5; ++i) {


printf("%c\n", carName[i]);
}

Try it Yourself »

And like we specified in the arrays chapter, you can also use the sizeof
formula (instead of manually write the size of the array in the loop condition (i
< 5)) to make the loop more sustainable:

Example
char carName[] = "Volvo";
int length = sizeof(carName) / sizeof(carName[0]);
int i;

for (i = 0; i < length; ++i) {


printf("%c\n", carName[i]);
}

Try it Yourself »

Another Way Of Creating Strings


In the examples above, we used a "string literal" to create a string variable.
This is the easiest way to create a string in C.

You should also note that you can create a string with a set of characters. This
example will produce the same result as the example in the beginning of this
page:

Example
char greetings[] = {'H', 'e', 'l', 'l', 'o', '
', 'W', 'o', 'r', 'l', 'd', '!', '\0'};
printf("%s", greetings);

Try it Yourself »

Why do we include the \0 character at the end? This is known as the "null
terminating character", and must be included when creating strings using this
method. It tells C that this is the end of the string.

Differences
The difference between the two ways of creating strings, is that the first method
is easier to write, and you do not have to include the \0 character, as C will do it
for you.

You should note that the size of both arrays is the same: They both have 13
characters (space also counts as a character by the way), including
the \0 character:
Example
char greetings[] = {'H', 'e', 'l', 'l', 'o', '
', 'W', 'o', 'r', 'l', 'd', '!', '\0'};
char greetings2[] = "Hello World!";

printf("%lu\n", sizeof(greetings)); // Outputs 13


printf("%lu\n", sizeof(greetings2)); // Outputs 13

Try it Yourself »

Real-Life Example
Use strings to create a simple welcome message:

Example
char message[] = "Good to see you,";
char fname[] = "John";

printf("%s %s!", message, fname);

C Special Characters
❮ PreviousNext ❯

Strings - Special Characters


Because strings must be written within quotes, C will misunderstand this string,
and generate an error:
char txt[] = "We are the so-called "Vikings" from the north.";

The solution to avoid this problem, is to use the backslash escape character.

The backslash (\) escape character turns special characters into string
characters:

Escape character Result

\' ' Single quote

\" " Double quote

\\ \ Backslash

The sequence \" inserts a double quote in a string:

Example
char txt[] = "We are the so-called \"Vikings\" from the north.";

Try it Yourself »

The sequence \' inserts a single quote in a string:

Example
char txt[] = "It\'s alright.";

Try it Yourself »

The sequence \\ inserts a single backslash in a string:


Example
char txt[] = "The character \\ is called backslash.";

Try it Yourself »

Other popular escape characters in C are:

Escape Character Result

\n New Line

\t Tab

\0 Null

C String Functions
String Functions
C also has many useful string functions, which can be used to perform certain
operations on strings.

To use them, you must include the <string.h> header file in your program:

#include <string.h>
String Length
For example, to get the length of a string, you can use the strlen() function:

Example
char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
printf("%d", strlen(alphabet));

Try it Yourself »

In the Strings chapter, we used sizeof to get the size of a string/array. Note
that sizeof and strlen behaves differently, as sizeof also includes
the \0 character when counting:

Example
char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
printf("%d", strlen(alphabet)); // 26
printf("%d", sizeof(alphabet)); // 27

Try it Yourself »

It is also important that you know that sizeof will always return the memory
size (in bytes), and not the actual string length:

Example
char alphabet[50] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
printf("%d", strlen(alphabet)); // 26
printf("%d", sizeof(alphabet)); // 50

Try it Yourself »

Concatenate Strings
To concatenate (combine) two strings, you can use the strcat() function:
Example
char str1[20] = "Hello ";
char str2[] = "World!";

// Concatenate str2 to str1 (result is stored in str1)


strcat(str1, str2);

// Print str1
printf("%s", str1);

Note that the size of str1 should be large enough to store the result of the two
strings combined (20 in our example).

Copy Strings
To copy the value of one string to another, you can use the strcpy() function:

Example
char str1[20] = "Hello World!";
char str2[20];

// Copy str1 to str2


strcpy(str2, str1);

// Print str2
printf("%s", str2);

Try it Yourself »

Note that the size of str2 should be large enough to store the copied string (20
in our example).

Compare Strings
To compare two strings, you can use the strcmp() function.

It returns 0 if the two strings are equal, otherwise a value that is not 0:

Example
char str1[] = "Hello";
char str2[] = "Hello";
char str3[] = "Hi";

// Compare str1 and str2, and print the result


printf("%d\n", strcmp(str1, str2)); // Returns 0 (the strings are equal)

// Compare str1 and str3, and print the result


printf("%d\n", strcmp(str1, str3)); // Returns -4 (the strings are not
equal)

C User Input
User Input
You have already learned that printf() is used to output values in C.

To get user input, you can use the scanf() function:

Example
Output a number entered by the user:

// Create an integer variable that will store the number we get from the
user
int myNum;

// Ask the user to type a number


printf("Type a number: \n");

// Get and save the number the user types


scanf("%d", &myNum);

// Output the number the user typed


printf("Your number is: %d", myNum);

Run example »

The scanf() function takes two arguments: the format specifier of the variable
(%d in the example above) and the reference operator (&myNum), which stores the
memory address of the variable.

Tip: You will learn more about memory addresses and functions in the next
chapter.

Multiple Inputs
The scanf() function also allow multiple inputs (an integer and a character in the
following example):

Example
// Create an int and a char variable
int myNum;
char myChar;

// Ask the user to type a number AND a character


printf("Type a number AND a character and press enter: \n");

// Get and save the number AND character the user types
scanf("%d %c", &myNum, &myChar);

// Print the number


printf("Your number is: %d\n", myNum);

// Print the character


printf("Your character is: %c\n", myChar);

Run example »
Take String Input
You can also get a string entered by the user:

Example
Output the name of a user:

// Create a string
char firstName[30];

// Ask the user to input some text


printf("Enter your first name: \n");

// Get and save the text


scanf("%s", firstName);

// Output the text


printf("Hello %s", firstName);

Run example »

Note: When working with strings in scanf(), you must specify the size of the
string/array (we used a very high number, 30 in our example, but atleast then
we are certain it will store enough characters for the first name), and you don't
have to use the reference operator (&).

However, the scanf() function has some limitations: it considers space


(whitespace, tabs, etc) as a terminating character, which means that it can only
display a single word (even if you type many words). For example:

Example
char fullName[30];

printf("Type your full name: \n");


scanf("%s", &fullName);
printf("Hello %s", fullName);

// Type your full name: John Doe


// Hello John
From the example above, you would expect the program to print "John Doe",
but it only prints "John".

That's why, when working with strings, we often use the fgets() function
to read a line of text. Note that you must include the following arguments: the
name of the string variable, sizeof(string_name), and stdin:

Example
char fullName[30];

printf("Type your full name: \n");


fgets(fullName, sizeof(fullName), stdin);

printf("Hello %s", fullName);

// Type your full name: John Doe


// Hello John Doe

Run example »

Use the scanf() function to get a single word as input, and use fgets() for
multiple words.

C Memory Address
❮ PreviousNext ❯

Memory Address
When a variable is created in C, a memory address is assigned to the variable.

The memory address is the location of where the variable is stored on the
computer.

When we assign a value to the variable, it is stored in this memory address.


To access it, use the reference operator (&), and the result represents where the
variable is stored:

Example
int myAge = 43;
printf("%p", &myAge); // Outputs 0x7ffe5367e044

Try it Yourself »

Note: The memory address is in hexadecimal form (0x..). You will probably not
get the same result in your program, as this depends on where the variable is
stored on your computer.

You should also note that &myAge is often called a "pointer". A pointer basically
stores the memory address of a variable as its value. To print pointer values,
we use the %p format specifier.

You will learn much more about pointers in the next chapter.

Why is it useful to know the memory address?


Pointers are important in C, because they allow us to manipulate the data in
the computer's memory - this can reduce the code and improve the
performance.

Pointers are one of the things that make C stand out from other programming
languages, like Python and Java.

C Pointers
Creating Pointers
You learned from the previous chapter, that we can get the memory
address of a variable with the reference operator &:

Example
int myAge = 43; // an int variable
printf("%d", myAge); // Outputs the value of myAge (43)
printf("%p", &myAge); // Outputs the memory address of myAge
(0x7ffe5367e044)

Try it Yourself »

A pointer is a variable that stores the memory address of another variable


as its value.

A pointer variable points to a data type (like int) of the same type, and is
created with the * operator.

The address of the variable you are working with is assigned to the pointer:

Example
int myAge = 43; // An int variable
int* ptr = &myAge; // A pointer variable, with the name ptr, that stores
the address of myAge

// Output the value of myAge (43)


printf("%d\n", myAge);

// Output the memory address of myAge (0x7ffe5367e044)


printf("%p\n", &myAge);

// Output the memory address of myAge with the pointer (0x7ffe5367e044)


printf("%p\n", ptr);

Try it Yourself »

Example explained

Create a pointer variable with the name ptr, that points to an int variable
(myAge). Note that the type of the pointer has to match the type of the variable
you're working with (int in our example).

Use the & operator to store the memory address of the myAge variable, and
assign it to the pointer.

Now, ptr holds the value of myAge's memory address.


Dereference
In the example above, we used the pointer variable to get the memory address
of a variable (used together with the & reference operator).

You can also get the value of the variable the pointer points to, by using
the * operator (the dereference operator):

Example
int myAge = 43; // Variable declaration
int* ptr = &myAge; // Pointer declaration

// Reference: Output the memory address of myAge with the pointer


(0x7ffe5367e044)
printf("%p\n", ptr);

// Dereference: Output the value of myAge with the pointer (43)


printf("%d\n", *ptr);

Try it Yourself »

Note that the * sign can be confusing here, as it does two different things in our
code:

• When used in declaration (int* ptr), it creates a pointer variable.


• When not used in declaration, it act as a dereference operator.

Good To Know: There are two ways to declare pointer variables in C:

int* myNum;
int *myNum;

Notes on Pointers

Pointers are one of the things that make C stand out from other programming
languages, like Python and Java.
They are important in C, because they allow us to manipulate the data in the
computer's memory. This can reduce the code and improve the performance. If
you are familiar with data structures like lists, trees and graphs, you should
know that pointers are especially useful for implementing those. And sometimes
you even have to use pointers, for example when working with files.

But be careful; pointers must be handled with care, since it is possible to


damage data stored in other memory addresses.

C Pointers and Arrays

Pointers & Arrays


You can also use pointers to access arrays.

Consider the following array of integers:

Example
int myNumbers[4] = {25, 50, 75, 100};

You learned from the arrays chapter that you can loop through the array
elements with a for loop:

Example
int myNumbers[4] = {25, 50, 75, 100};
int i;

for (i = 0; i < 4; i++) {


printf("%d\n", myNumbers[i]);
}

Result:

25
50
75
100
Try it Yourself »

Instead of printing the value of each array element, let's print the memory
address of each array element:

Example
int myNumbers[4] = {25, 50, 75, 100};
int i;

for (i = 0; i < 4; i++) {


printf("%p\n", &myNumbers[i]);
}

Result:

0x7ffe70f9d8f0
0x7ffe70f9d8f4
0x7ffe70f9d8f8
0x7ffe70f9d8fc

Try it Yourself »

Note that the last number of each of the elements' memory address is different,
with an addition of 4.

It is because the size of an int type is typically 4 bytes, remember:

Example
// Create an int variable
int myInt;

// Get the memory size of an int


printf("%lu", sizeof(myInt));

Result:

Try it Yourself »
So from the "memory address example" above, you can see that the compiler
reserves 4 bytes of memory for each array element, which means that the
entire array takes up 16 bytes (4 * 4) of memory storage:

Example
int myNumbers[4] = {25, 50, 75, 100};

// Get the size of the myNumbers array


printf("%lu", sizeof(myNumbers));

Result:

16

Try it Yourself »

How Are Pointers Related to Arrays


Ok, so what's the relationship between pointers and arrays? Well, in C,
the name of an array, is actually a pointer to the first element of the array.

Confused? Let's try to understand this better, and use our "memory address
example" above again.

The memory address of the first element is the same as the name of the
array:

Example
int myNumbers[4] = {25, 50, 75, 100};

// Get the memory address of the myNumbers array


printf("%p\n", myNumbers);

// Get the memory address of the first array element


printf("%p\n", &myNumbers[0]);

Result:
0x7ffe70f9d8f0
0x7ffe70f9d8f0

Try it Yourself »

This basically means that we can work with arrays through pointers!

How? Since myNumbers is a pointer to the first element in myNumbers, you can
use the * operator to access it:

Example
int myNumbers[4] = {25, 50, 75, 100};

// Get the value of the first element in myNumbers


printf("%d", *myNumbers);

Result:

25

Try it Yourself »

To access the rest of the elements in myNumbers, you can increment the
pointer/array (+1, +2, etc):

Example
int myNumbers[4] = {25, 50, 75, 100};

// Get the value of the second element in myNumbers


printf("%d\n", *(myNumbers + 1));

// Get the value of the third element in myNumbers


printf("%d", *(myNumbers + 2));

// and so on..

Result:

50
75
Try it Yourself »

Or loop through it:

Example
int myNumbers[4] = {25, 50, 75, 100};
int *ptr = myNumbers;
int i;

for (i = 0; i < 4; i++) {


printf("%d\n", *(ptr + i));
}

Result:

25
50
75
100

Try it Yourself »

It is also possible to change the value of array elements with pointers:

Example
int myNumbers[4] = {25, 50, 75, 100};

// Change the value of the first element to 13


*myNumbers = 13;

// Change the value of the second element to 17


*(myNumbers +1) = 17;

// Get the value of the first element


printf("%d\n", *myNumbers);

// Get the value of the second element


printf("%d\n", *(myNumbers + 1));

Result:
13
17

Try it Yourself »

This way of working with arrays might seem a bit excessive. Especially with
simple arrays like in the examples above. However, for large arrays, it can be
much more efficient to access and manipulate arrays with pointers.

It is also considered faster and easier to access two-dimensional arrays with


pointers.

And since strings are actually arrays, you can also use pointers to
access strings.

For now, it's great that you know how this works. But like we specified in the
previous chapter; pointers must be handled with care, since it is possible to
overwrite other data stored in memory.

You might also like