我们知道,指针是C语言中的一个重要概念,也是C语言的一个重要角色。
主要体现在:
1、可以有效地表示复杂的数据结构
2、能够动态的分配内存
3、方便的使用字符串
4、有效而方便的使用数组
5、在调用函数的时候能获得1个以上的返回结果
6、能够直接处理内存单元地址等
掌握指针的应用,可以使程序简洁、紧凑、高效。
一、指针变量的定义
1. 定义方式: 类型标识符 *指针变量名;
2. 指针变量的三要素:
指针变量的类型:和其所指变量的类型一致
指针变量的值:另一个变量在内存的地址
指针的名字:起名同普通变量
3.说明:标识符前面的*,表示该变量是指针变量,但是*后才是指针变量的名字。
二、指针变量的赋值
1.指针变量名=某一地址;(&取某一地址符)
2.指针变量名= 另一个已赋值的指针变量
//例子1
int i = 0;
int *p = &i;//方式一
int *q = p;//方式二
如图
三、 指针运算
//例子2
int *p,a;
char *q,b;
p = &a;
q = &b;
p++;
q++;
p++,q++执行完成之后
我们看到p移动了4个字节,而q只移动了一个字节。
因为p指向的int型占用4个字节空间(一般情况),自加一后指向ffc4,而char型占用1个字节,所以q指向ffd1
四、修改所指向变量的值
五、在函数内部修改外面变量的值int a = 10; int *p = &a; *p = 20; printf("%d\n",a) ;//此时我们看到a的值通用指针将其修改为了20
void change(int *n); int main(){ int a = 10; change(&a); printf("%d\n",a); } void change(int *n) { *n = 20; }
六、调用函数返回多个结果
七、指针与数组#include <stdio.h> int change(int a, int *p); int main() { int a = 10; int b = 20; int rs = change(a,&b); printf("rs=%d, b=%d\n", rs, b);// a=20, b=30 return 0; } int change(int a, int *p) { *p += a; return a+10; }
将数组当做函数参数传入时,会自动转为指针
八、指针与字符串void change(int array[]); int main() { int ages[5] = {10, 11, 19, 78, 67}; change(ages); return 0; } //利用一个指针来接收一个数组,指针变量array指向了数组的首元素 void change(int *array) { printf("%d\n", array[2]); //printf("%d\n", *(array+2)); }
1.定义字符串的两种方式
① 利用数组
char name[] = "csdntest";
特点:字符串里面的字符是可以修改的
使用场合:字符串的内容需要经常修改
②利用指针特点:字符串其实是一个常量字符串,里面的字符是不能修改char *name= "csdntest"
使用场合:字符串的内容不需要修改,而且这个字符串经常使用
综上:数组定义字符串相当于变量,而指针定义字符串相当于常量
以上是我对C语言指针的一点理解,实乃冰山一角,有不足的地方我们可以一起学习,共同提高。