1 / 27

Programming

Programming. Review: Functions, pointers and strings. num. str. m o s h e . 1 2 3. q. p. Pointers. int nums[] = {1, 2, 3}; char str[] = "moshe"; int* q = nums; char* p = str;. str. 1 2 3. (p+3). Pointers. int nums[] = {1, 2, 3}; char str[] = "moshe";

conner
Download Presentation

Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programming Review: Functions, pointers and strings

  2. num str m o s h e \0 1 2 3 q p Pointers int nums[] = {1, 2, 3}; char str[] = "moshe"; int* q = nums; char* p = str;

  3. str 1 2 3 (p+3) Pointers int nums[] = {1, 2, 3}; char str[] = "moshe"; int* q = nums; char* p = str; m o s h e \0 (q+1)

  4. 1 2 3 Pointers p[0] *p p[i] *(p+i) p[1] p[4] q[0] q[1] q[2] m o s h e \0 q p

  5. 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;}

  6. 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

  7. int main() { int n = 3; multBy3(n); printf(“n=%d”,n); } void multBy3(int n) { int num = n; num *= 3; n = num;} 1.What is wrong here?

  8. 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?

  9. 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?

  10. int main() { int n = 3; multBy3(&n); printf(“n=%d”,n); } void multBy3(int *n) { int num = *n; num *= 3; n = #} 4.What is wrong here?

  11. 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

  12. 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

  13. 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 void multBy3(int *n) { (*n) *=3; }

  14. 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); } References

  15. 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

  16. Exercise (cont.) Write a program that accepts a string from the userand replaces all punctuation signs (,.;:!?) with spaces

  17. Solution (str_any.c) char* str_any(char* str1, char* str2) { while (*str1 != '\0') { if (strchr(str2, *str1) != NULL) { return str1; } ++str1; } return NULL; }

  18. 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 = str_any(s, punc); p != NULL; p = str_any(p + 1, punc)) { *p = ' '; } printf("Resulting string is:\n%s\n", s); return 0; }

  19. 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

  20. ‘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

  21. ‘main’ prototype int main(int argc, char* argv[]) argc : 3 argv : progname\0 text\0 178\0

  22. 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; }

  23. Specifying the arguments • In Visual Studio:Project  Settings  Debug, in the ‘program arguments’ field

  24. 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>)

  25. 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>

  26. 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

  27. 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; }

More Related