C语言中的指针笔记

C语言指针

得到变量的地址

可以使用&运算符找到变量保存在内存中的位置

int x = 1;
printf("x的内存地址是"%p\n",&x)

%p格式符将地址以16进制格式输出。
&x将找到变量x的地址。一般我们会使用一个指针变量保存这个地址。

指针变量是一个用来保存存储器地址的变量,当声明指针变量时,需要说明指针所指向的地址中保存的数据的类型:

int *addr_x = &x;

声明一个int类型的指针变量addr_x,&x或者x变量的地址,并保存这个地址。

读取地址的内容

根据存储器的地址读取保存在那里的数据,可以使用*运算符

int v_s = *addr_x

&运算符是接受一个数据,然后获取其内存地址。
*是接收一个地址,然后获取这个数据的值。
这两个运算符正好相反。

改变地址的内容

C语言中的指针变量还可以进行运算,可以使用*运算符。
将指针变量放在赋值运算符左边。

*addr_x = 100;

代码示例

#include<stdio.h>
void go_source_east(int *lat,int *lon){
    //(右边*lat)读取lat地址的lat的内容,并改变地址中的内容(左边lat*)。
    *lat = *lat-1;
    *lon = *lon+1;
}

int main()
{
    int latitude =32;
    int longitude =-64;
    // 通过&来找到这两个变量在内存中的地址
    go_source_east(&latitude,&longitude);
    printf("停!当前位置是:[%i,%i]\n",latitude,longitude);
    return 0;
}

数组变量

数组变量可以用作指针
数组的指针指向的是数组第一个元素。
由此可以得到下面的等式

int d [] ={4,2,3}
d[0]==*d

地址是数字,所以可以进行指针运算,如果找存储器的下一个地址,可以增加指针的值。

d[i]=*(d+i)

数组的索引从0开始,正是为了方便找到元素的地址单元,指针需要加上的那个数字。
同时数组的索引实际表示的是当前元素到第一个元素的偏移量,可不就是0开始么。

代码示例

#include<stdio.h>
int main(){

    int d[] ={1,2,3,100};
    //以下四种方法相等
    printf("%i\n", 3[d]);
   //下标运算符:表达式 x[y] 等效于(*((x)+(y)))
    printf("%i\n", d[3]);
    printf("%i\n", *(d+3));
    printf("%i\n", *(3+d));
    return 0;
}
posted @ 2019-09-15 16:04  公众号python学习开发  阅读(349)  评论(0编辑  收藏  举报