programming review: functions, pointers and strings
Post on 21-Dec-2015
224 views
TRANSCRIPT
Pointers
int nums[] = {1, 2, 3};
char str[] = "moshe";
int* q = nums;
char* p = str;
1 2 3
q
num m o s h e \0
p
str
Pointers
int nums[] = {1, 2, 3};
char str[] = "moshe";
int* q = nums;
char* p = str;
1 2 3
(q+1) (p+3)
m o s h e \0str
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()
{
int n = 3;
multBy3(n);
printf(“n=%d”,n);
}
void multBy3(int n)
{
int num = n;
num *= 3;n = num;
}
2.What is wrong here?
int main()
{
int n = 3;
multBy3(&n);
printf(“n=%d”,n);
}
void multBy3(int *n)
{
int num = n;
num *= 3;n = num;
}
3.What is wrong here?
int main()
{
int n = 3;
multBy3(&n);
printf(“n=%d”,n);
}
void multBy3(int *n)
{
int num = *n;
num *= 3;n = num;
}
4.What is wrong here?
int main()
{
int n = 3;
multBy3(&n);
printf(“n=%d”,n);
}
void multBy3(int *n)
{
int num = *n;
num *= 3;n = #
}
References
1. Define a variable in the main
2. Pass its address to the function
3. The function fills the address with a value
4. The main can use it as a normal variable
int main() {
int num;
}
References
1. Define a variable in the main
2. Pass its address to the function
3. The function fills the address with a value
4. The main can use it as a normal variable
Int main() {
int num;
multBy3(&num);
}
References
1. Define a variable in the main
2. Pass its address to the function
3. The function fills the address with a value
4. The main can use it as a normal variable
void multBy3(int *n) {
(*n) *=3;
}
Int main() {
int num;
multBy3(&num);
}
References
1. Define a variable in the main
2. Pass its address to the function
3. The function fills the address with a value
4. 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 userand 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;}
Solutionint main(void){ char* punc = ".,;:!?"; char s[MAX_LENGTH + 1]; char *p;
printf("Please enter a line of text\n"); scanf("%100s", s);
for (p = str_any(s, punc); p != NULL; p = str_any(p + 1, punc)) { *p = ' '; }
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
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
int main(int argc, char* argv[])
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
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
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>
int atoi(char s[]);double atof(char s[]);
Exercise
Write a program that accepts two numbers as command line arguments, representing a rectangle’s height and width (as floating-point 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;}