Transcript Recap
Programming
Review:
Functions, pointers and strings
Pointers
int nums[] = {1, 2, 3};
char str[] = "moshe";
int* q = nums;
char* p = str;
num
1
q
2
3
str
m o s h e \0
p
Pointers
int nums[] = {1, 2, 3};
char str[] = "moshe";
int* q = nums;
char* p = str;
1
(q+1)
2
3
str
m o s h e \0
(p+3)
Pointers
p[0]
p[i]
*p
*(p+i)
q[0] q[1] q[2]
1
q
2
3
p[1] p[4]
m o s h e \0
p
Pointers and Functions
If we want to change a variable inside a function,
we must pass it a pointer to the variable (its
address)
The function will “fill” this address with the right
value
Example: Swap
void swap(int *x, int *y)
{
int temp = *x;
*x = *y;
*y = temp;
}
Pointers and Functions
Variables that are defined inside the function
“die” when the function ends!!!
char* func()
{
char str[LENGTH + 1];
...
return str;
}
str doesn’t exist outside the
function’s body
1.What is wrong here?
int main()
void multBy3(int n)
{
{
int n = 3;
int num = n;
multBy3(n);
num *= 3;
n = num;
printf(“n=%d”,n);
}
}
2.What is wrong here?
int main()
void multBy3(int *n)
{
{
int n = 3;
int num = n;
multBy3(&n);
num *= 3;
n = num;
printf(“n=%d”,n);
}
}
3.What is wrong here?
int main()
void multBy3(int *n)
{
{
int n = 3;
int num = *n;
multBy3(&n);
num *= 3;
n = num;
printf(“n=%d”,n);
}
}
4.What is wrong here?
int main()
void multBy3(int *n)
{
{
int n = 3;
int num = *n;
multBy3(&n);
num *= 3;
n = #
printf(“n=%d”,n);
}
}
References
1.
2.
3.
4.
Define a variable
in the main
Pass its address to
the function
The function fills
the address with a
value
The main can use it
as a normal variable
int main() {
int num;
}
References
1.
2.
3.
4.
Define a variable
in the main
Pass its address to
the function
The function fills
the address with a
value
The main can use it
as a normal variable
Int main() {
int num;
multBy3(&num);
}
References
1.
2.
3.
4.
Define a variable
in the main
Pass its address to
the function
The function fills
the address with a
value
The main can use it
as a normal variable
Int main() {
int num;
multBy3(&num);
}
void multBy3(int *n) {
(*n) *=3;
}
References
1.
2.
3.
4.
Define a variable
in the main
Pass its address to
the function
The function fills
the address with a
value
The main can use it
as a normal variable
Int main() {
int num;
multBy3(&num);
printf(“num=%d”,num);
}
Exercise with pointers and strings
Implement the following function:
char* str_any(char *str1, char *str2);
Input – two strings str1, str2
Output – pointer to the first occurrence in str1 of
any of the characters contained in str2
Exercise (cont.)
Write a program that accepts a string from the user
and replaces all punctuation signs (,.;:!?) with
spaces
Solution (str_any.c)
char* str_any(char* str1, char* str2)
{
while (*str1 != '\0')
{
if (strchr(str2, *str1) != NULL) {
return str1;
}
++str1;
}
return NULL;
}
Solution
int main(void)
{
char* punc = ".,;:!?";
char s[MAX_LENGTH + 1];
char *p;
printf("Please enter a line of text\n");
scanf("%100s", s);
for (p
p
p
*p
}
= str_any(s, punc);
!= NULL;
= str_any(p + 1, punc)) {
= ' ';
printf("Resulting string is:\n%s\n", s);
return 0;
}
Command line arguments
Command line arguments are
arguments for the main function
Recall that main is basically a function
It can receive arguments like other
functions
The ‘calling function’ in this case is the
operating system, or another program
‘main’ prototype
int main(int argc, char* argv[])
When we want main to accept command line
arguments, we must define it like this
argc
holds the number of arguments that were
entered by the caller
argv is an array of pointers to char – an array of
strings – holding the text values of the arguments
The first argument is always the program’s name
‘main’ prototype
int main(int argc, char* argv[])
argc : 3
argv :
p
r
o
g
n
a
m
e
\0
t
e
x
t
\0
1
7
8
\0
Example
/* This program displays its command-line arguments */
#include <stdio.h>
int main(int argc, char *argv[])
{
int i;
printf("The program's command line arguments are: \n");
for (i = 0; i < argc; ++i) {
printf("%s\n", argv[i]);
}
return 0;
}
Specifying the arguments
In Visual Studio:
Project Settings Debug, in the
‘program arguments’ field
Specifying the arguments
We can also specify the arguments
directly, by using the Windows console
(StartRun…, then type ‘cmd’ and drag
the executable into the window. Then
type the arguments and <Enter>)
Helper functions – atoi/atof
int atoi(char s[]);
double atof(char s[]);
Command line arguments are received in
the form of strings
These functions are used when we want to
transform them into numbers
For example – atof(“13.5”) returns the
number 13.5.
Must #include <stdlib.h>
Exercise
Write a program that accepts two numbers
as command line arguments, representing
a rectangle’s height and width (as floatingpoint numbers).
The program should display the
rectangle’s area and perimeter
Solution (args_rectangle.c)
int main(int argc, char* argv[])
{
double width, height;
if (argc != 3)
{
printf("Wrong number of arguments!\n");
return 1;
}
width = atof(argv[1]);
height = atof(argv[2]);
printf("The rectangle's area is %g\n", width * height);
printf("The rectangle's perimeter is %g\n",
2 * (width + height));
return 0;
}