湛蓝之海 发表于 2021-12-30 17:49:14

一张图秒懂C语言( 指针 )

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;
int *p;
p = &a;

将数组中的第4个元素的地址赋值给p
指向数组
用指针指向数组,其实数组名存储的是整个数组的起始地址
int a;
int *p;
p = a;
将数组的起始地址赋值给指针p
引用数组元素
引用数组元素的方式有三种:eg:
int a,int p;
访问数组的第3个元素
a
*(a+2)
*(p + 2)
这三种方式是等价的 即:
p+2 = &a
代码示例:
将数组的第一个元素与最后一个元素调换位置,第二个与倒数第二个交换…
#include int main(){
int a = {1,2,3,4,5,6,7,8,9,10};
int *p = a,*q = &a;
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);
}

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次


https://blog.51cto.com/u_1760061/4863907
页: [1]
查看完整版本: 一张图秒懂C语言( 指针 )