C基础学习笔记——01-C基础第09天(指针下)
在学习C基础总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。
01-C基础第09天(指针下)
目录:
1、指针和函数
(1)函数形参改变实参的值
(2)数组名做函数参数
(3)指针做为函数的返回值
2、指针和字符串
(1)字符指针
(2)字符指针做函数参数
(3)const修饰的指针变量
(4)指针数组做为main函数的形参
(5)练习:字符串反转
3、指针小结
1、指针和函数
(1)函数形参改变实参的值
1 #include <stdio.h> 2 3 void swap1(int x, int y) 4 { 5 int tmp; 6 tmp = x; 7 x = y; 8 y = tmp; 9 printf("x = %d, y = %d\n", x, y); 10 } 11 12 void swap2(int *x, int *y) 13 { 14 int tmp; 15 tmp = *x; 16 *x = *y; 17 *y = tmp; 18 } 19 20 int main() 21 { 22 int a = 3; 23 int b = 5; 24 swap1(a, b); //值传递 25 printf("a = %d, b = %d\n", a, b); 26 27 a = 3; 28 b = 5; 29 swap2(&a, &b); //地址传递 30 printf("a2 = %d, b2 = %d\n", a, b); 31 32 return 0; 33 }
(2)数组名做函数参数
数组名做函数参数,函数的形参会退化为指针
1 #include <stdio.h> 2 3 //void printArrary(int a[10], int n) 4 //void printArrary(int a[], int n) 5 void printArrary(int *a, int n) 6 { 7 int i = 0; 8 for (i = 0; i < n; i++) 9 { 10 printf("%d, ", a[i]); 11 } 12 printf("\n"); 13 } 14 15 int main() 16 { 17 int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 18 int n = sizeof(a) / sizeof(a[0]); 19 20 //数组名做函数参数 21 printArrary(a, n); 22 return 0; 23 }
(3)指针做为函数的返回值
1 #include <stdio.h> 2 3 int a = 10; 4 5 int *getA() 6 { 7 return &a; 8 } 9 10 11 int main() 12 { 13 *( getA() ) = 111; 14 printf("a = %d\n", a); 15 16 return 0; 17 }
2、指针和字符串
(1)字符指针
1 #include <stdio.h> 2 3 int main() 4 { 5 char str[] = "hello world"; 6 char *p = str; 7 *p = 'm'; 8 p++; 9 *p = 'i'; 10 printf("%s\n", str); 11 12 p = "mike jiang"; 13 printf("%s\n", p); 14 15 char *q = "test"; 16 printf("%s\n", q); 17 18 return 0; 19 }
(2)字符指针做函数参数
1 #include <stdio.h> 2 3 void mystrcat(char *dest, const char *src) 4 { 5 int len1 = 0; 6 int len2 = 0; 7 while (dest[len1]) 8 { 9 len1++; 10 } 11 while (src[len2]) 12 { 13 len2++; 14 } 15 16 int i; 17 for (i = 0; i < len2; i++) 18 { 19 dest[len1 + i] = src[i]; 20 } 21 } 22 23 int main() 24 { 25 char dst[100] = "hello mike"; 26 char src[] = "123456"; 27 28 mystrcat(dst, src); 29 printf("dst = %s\n", dst); 30 31 return 0; 32 }
(3)const修饰的指针变量
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 int main(void) 6 { 7 //const修饰一个变量为只读 8 const int a = 10; 9 //a = 100; //err 10 11 //指针变量, 指针指向的内存, 2个不同概念 12 char buf[] = "aklgjdlsgjlkds"; 13 14 //从左往右看,跳过类型,看修饰哪个字符 15 //如果是*, 说明指针指向的内存不能改变 16 //如果是指针变量,说明指针的指向不能改变,指针的值不能修改 17 const char *p = buf; 18 // 等价于上面 char const *p1 = buf; 19 //p[1] = '2'; //err 20 p = "agdlsjaglkdsajgl"; //ok 21 22 char * const p2 = buf; 23 p2[1] = '3'; 24 //p2 = "salkjgldsjaglk"; //err 25 26 //p3为只读,指向不能变,指向的内存也不能变 27 const char * const p3 = buf; 28 29 return 0; 30 }
(4)指针数组做为main函数的形参
int main(int argc, char *argv[]);
1)main函数是操作系统调用的,第一个参数标明argv数组的成员数量,argv数组的每个成员都是char *类型
2)argv是命令行参数的字符串数组
3)argc代表命令行参数的数量,程序名字本身算一个参数
1 #include <stdio.h> 2 3 //argc: 传参数的个数(包含可执行程序) 4 //argv:指针数组,指向输入的参数 5 int main(int argc, char *argv[]) 6 { 7 8 //指针数组,它是数组,每个元素都是指针 9 char *a[] = { "aaaaaaa", "bbbbbbbbbb", "ccccccc" }; 10 int i = 0; 11 12 printf("argc = %d\n", argc); 13 for (i = 0; i < argc; i++) 14 { 15 printf("%s\n", argv[i]); 16 } 17 return 0; 18 }
(5)项目开发常用字符串应用模型
练习:字符串反转
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 int inverse(char *p) 6 { 7 if (p == NULL) 8 { 9 return -1; 10 } 11 char *str = p; 12 int begin = 0; 13 int end = strlen(str) - 1; 14 char tmp; 15 16 while (begin < end) 17 { 18 //交换元素 19 tmp = str[begin]; 20 str[begin] = str[end]; 21 str[end] = tmp; 22 23 begin++; //往右移动位置 24 end--; //往左移动位置 25 } 26 27 return 0; 28 } 29 30 int main(void) 31 { 32 //char *str = "abcdefg"; //文件常量区,内容不允许修改 33 char str[] = "abcdef"; 34 35 int ret = inverse(str); 36 if (ret != 0) 37 { 38 return ret; 39 } 40 41 printf("str ========== %s\n", str); 42 return 0; 43 }
3、指针小结
定义 |
说明 |
int i |
定义整形变量 |
int *p |
定义一个指向int的指针变量 |
int a[10] |
定义一个有10个元素的数组,每个元素类型为int |
int *p[10] |
定义一个有10个元素的数组,每个元素类型为int* |
int func() |
定义一个函数,返回值为int型 |
int *func() |
定义一个函数,返回值为int *型 |
int **p |
定义一个指向int的指针的指针,二级指针 |
在学习C基础总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。
posted on 2020-06-02 21:10 Alliswell_WP 阅读(177) 评论(0) 编辑 收藏 举报
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步