指针使用
指针应用场景
指针应用场景一:
交换两个变量的值
指针应用场景二:
函数返回多个值,某些值就只能通过指针返回
传入的参数实际上是需要保存带回的结果的变量
指针应用场景二b:
函数返回运算状态,结果通过指针返回
常用套路是让函数返回不属于有效范围内的值来表示出错
-1,0(文件操作中的例子)
当任何数值都是有效的可能结果是,就需要分开返回
常见错误:
定义指针之后未赋值就开始使用
指针未赋初值时不知道指向哪里,不可控
再探数组:
函数参数表中的数组是指针 — void minmax(int a[], int len, int *max, int *min)
void minmax(int *a, int len, int *max, int *min)
以下四种函数原型是等价的:
数组变量是特殊的指针:
数组变量本身表达地址:
[ ]运算符可以对数组做,也可以对指针做:
p[0] <==> a[0]
运算可以对指针做,也可以对数组做:
a = 25
数组变量是const的指针,所以不能被赋值
指针与const
指针是const
所指的是const
判断
- const在 前面表示,*指针所指的东西不能被修改,即,不能通过指针去修改指针指向的变量
const在 * 后面表示, 指针不能被修改,即,指针不能再指向别的变量
转换
const数组
指针运算
指针+1 = 指针地址+sizeof(指针类型) 将指针移到下一个单元
- 遍历方法:
*p++
- 指针比较:
- 0地址:
- 指针的类型
- 指针类型转换
指针作用
输入数据
- 动态内存分配
- malloc
- 没空间?
常见问题:
putchar
- getchar
- shell 读写缓冲区
- 字符串数组
- char[ ][10]
- char *a[ ]
程序参数 — main函数
string.h
//问题,无法全部复制 char mycmp(char dst, const char src) { int idx = 0; while(src[idx]) { dst[idx] = src[idx]; idx++; //printf(“dst[idx]=%s\n”,dst[idx]); } dst[idx] = ‘\0’; return dst; } char mycmp2(char dst,const char src) { char ret = dst; while(src)//scr当前位不等于零 { dst++ = src++; } *dst = ‘\0’; return ret; }
char mycmp3(char dst,const char src) { char ret = dst; while(dst++ = src++)//scr当前位不等于零 ; *dst = ‘\0’; return ret; } int main() { char s[] = “abcdefg”; char ss[] = “abcdefg”; char sss[] = “abcdefg”;
char s1[] = "";
char s2[] = "";
char s3[] = "";
strcpy(s1,s);
printf("s1=%s\n",s1);
mycmp(s2,ss);
printf("s2=%s\n",s2);
mycmp(s3,sss);
printf("s3=%s\n",s3);
return 0;
}
```