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
(StartRun…, 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;
}