C语言
指针
#includevoid f(int *p); int main(void) { int i = 6; printf("&i=%p\n", &i); f(&i); } void f(int *p) { printf("p=%p\n", p); }
指针运算
*p++
- 取出p所指的那个数据来,完事之后顺便把p移到下一个位置去
- *的优先级虽然高,但没有++高
- 常用于数组类的连续空间操作
- 在某些CPU上,这可以直接被翻译成一条汇编指令
用指针干啥
- 需要传入较大的数据时用作参数
- 传入数组后对数组做操作
- 函数返回不止一个结果
- 需要用函数来修改不止一个变量
- 动态申请的内存...
动态内存分配
malloc返回的是void
#include#include int main() { int number; int *a; int i; printf("输入数量:"); scanf("%d", &number); // int a[number]; a = (int *)malloc(number * sizeof(int)); for (i = 0; i < number; i++) { scanf("%d", &a[i]); } for (i = number - 1; i >= 0; i--) printf("%d ", a[i]); free(a); return 0; }
字符串变量
指针还是数组?
char *str= "hello";
char word[ ] = "hello";
- 数组:这个字符串在这里
-作为本地变量空间自动被回收
- 指针:这个字符串不知道在哪里
-处理参数
-动态分配空间
如果要构造一个字符串->数组
如果要处理一个字符串->指针
char*是字符串?
- 字符串可以表达为char*的形式
- char*不一定是字符串 --本意是指向字符的指针,可能指向的是字符的数组(就像int*一样)--这里有一个指针,这个指针指向一个字节或者一串连续的字节
只有它所指的字符数组组有结尾的0,才能说它所指的是字符串。