c语言这张图总结的非常好
分享给大家
C语言指针初涉
一个简单的问题:
你的一个朋友搬家了,你来到她住的那栋大厦,你怎么样才能够找到她呢?当然是知道房号啦!那么你怎么知道房号呢?
她之前没和你说房号;你就需要向楼道保安咨询她所在的房号了
间接访问
通过指针指向变量,先获得变量地址,然后根据地址去访问对应的存储单元
她搬家前和你说了她的房号,那么你就可以直接去找她的房间了
直接访问
通过变量名或者地址直接访问变量
指针的使用
指针变量的定义
类型说明符号 *变量名
int *p :指向整型变量的指针变量
float *q:指向浮点型变量的指针变量
指针变量的初始化与赋值
可以使用&取得变量的地址
int a;
*p = &q;
*q=p; 让p指向a后;又把地址赋值给q,所以p和q都指向同一变量a
通过指针变量访问变量
可以使用*(间接访问运算符)来访问指针所指向的变量
int a=100,b;
int *p = &a;
b = *p;
//将p指向的a变量的值赋给变量b 案例
#include int main(){
int a = 10,b;
int *p,*q;
//取得a变量的地址赋值给p
p = &a;
b = *p + 3;
//如果p指向的内存中的数据 + 1,a会等于多少 ?
*p = *p + 1;
printf("%d,%d\n",a,b);
//我们把p的地址赋给q,然后对q+1,a会不会发生变化呢?
q = p;
*q = *q + 1;
printf("%d,%d\n",a,b);
return 0;
}
输出结果:11,1312,13
指针与一维数组
指向数组元素
用指针指向数组中的某个元素:
int a[4];
int *p;
p = &a[3];
将数组中的第4个元素的地址赋值给p
指向数组
用指针指向数组,其实数组名存储的是整个数组的起始地址
int a[5];
int *p;
p = a; 将数组的起始地址赋值给指针p
引用数组元素
引用数组元素的方式有三种:eg:
int a[5],int p; 访问数组的第3个元素
a[2]
*(a+2)
*(p + 2) 这三种方式是等价的 即:
p+2 = &a[2] 代码示例:
将数组的第一个元素与最后一个元素调换位置,第二个与倒数第二个交换…
#include int main(){
int a[10] = {1,2,3,4,5,6,7,8,9,10};
int *p = a,*q = &a[9];
int i,num;
while(p <= q) {
num = *q;
*q = *p;
*p = num;
//将指针p后移一个单位; //将指针q前移一个单位
p++;
q--;
}
printf("输出交换后的数组:\n");
for(i = 0;i < 10;i++) {
printf("%d ",a[i]);
}
printf("\n");
return 0;}
输出结果:10,9,8,7,6,5,4,3,2,1
指针与字符串
字符串的定义:除了之前学过的:char str[] = "Hello"外;
现在我们可以使用另外一种方式定义一个字符数组:char *str = "Hello"
①系统为"Hello"分配连续的内存空间
②将存储空间的首地址给指针str
#include int main(){
int num = 0;
char *str = "How do you do!";
for(;*str;str++) {
if(*str == 'o')num++;
}
printf("字符串中o出现了%d次\n",num);
return 0;
}
输出:字符串中o出现了4次
|