C语言的&取地址符,指针

指针 地址 c语言 编程技术
发布日期 2023-06-06 更新日期 2023-06-06 阅读次数 166 文章字数 855

什么是取地址符

取地址符,就是获取当前变量的内存地址,想要获得那个变量的地址,就用&后面跟上那个变量。

已知变量定义后,就会随机分配内存地址

举个例子:

#include <stdio.h>

int main(){
    
    int *p;
    int a;  //定义变量a
    p = &a;  //p保存a变量的地址
    
    printf("%d",p);  //随机结果,如1848787812
    
    return 0;
}

那么我们可以发现,&后面必须是一个变量,而不能是常量,有汇编基础的都知道常量是一个立即数,不是容器,没有地址。

每一次使用&,都会增加一级指针。

#include <stdio.h>

char x;
char* p1;
char** p2;
char*** p3;
char**** p4;


int main()
{
	p1 = &x;		//char*
	
	p2 = &p1;		//char**
	
	p3 = &p2;		//char***
	
	p4 = &p3;		//char****

	return 0;
}

指针的用法

指针变量,保存的就是一个地址符

例如第一个例子中的 int *p; 则 p 就是该地址,如果想要取该地址保存的数据,则使用 *p,下面再演示一下:

#include <stdio.h>

int main()
{

    int *p;
    int a;
    
    a = 10;
    
    p = &a;
    
    printf("a变量的地址是:%d
",p);
    
    printf("a变量的值是:%d",*p); //如果a没有赋值,则可能会是随机值【因为释放的时候并非把值清零,而是去掉引用】

	return 0;
}

a变量的地址是:-171105836
a变量的值是:32764

另外就*p的值而言,*p=a,和p=&a是等价的。但是实际地址是不同的,可以测试一下:

#include <stdio.h>

int main()
{

    int *p;
    int *p1;
    int *p2;
    int a;
    
    a = 10;
    
    p = &a;
    *p1 = a;
    p2= &a;
    
    printf("p变量的地址是:%d,值是%d
",p,*p);
    
    printf("p1变量的值是:%d,值是%d
",p1,*p);
    
    printf("p2变量的值是:%d,值是%d
",p2,*p2);

	return 0;
}

p变量的地址是:1697686996,值是10
p1变量的值是:1697687248,值是10
p2变量的值是:1697686996,值是10


文章作者: 朱丰华

文章链接: https://smart.52dixiaowo.com/blog/post-426.html

版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。

指针 地址 c语言

发表评论

相关推荐
朱丰华   |   1年前   |   linux · upx

Linux下安装UPX

450    评论    点赞
朱丰华   |   1年前   |   git · hub · 仓库

go克隆并引用github仓库

162    评论    点赞
朱丰华   |   1年前   |   php

windows下编写、编译php扩展

177    评论    点赞
朱丰华   |   1年前   |   linux · php

linux下编写、编译php扩展

161    评论    点赞
朱丰华   |   1年前   |   c语言 · 编译

C语言中预编译#if的使用

87    评论    点赞
朱丰华   |   1年前   |   js · 模块 · nodejs

nodejs引入自定义模块

57    评论    点赞
朱丰华   |   1年前   |   nvm · git · 安装

entos7安装、使用nvm

84    评论    点赞
朱丰华   |   1年前   |   php · git · 编译

从源码编译php

143    评论    点赞
朱丰华   |   1年前   |   php · zend · 反射 · api

php zend引擎api接口:ZENDAPI阅读,反射调用示例

134    评论    点赞
朱丰华   |   1年前   |   文件 · c语言 · include

C语言include语法,h文件和c文件的关系

108    评论    点赞
朱丰华   |   1年前   |   php · 引用 · 变量 · c语言

php扩展内存管理与引用计数

139    评论    点赞
朱丰华   |   1年前   |   zend · php · 类型 · zval

php内核zval类型,与基本类型的转换

127    评论    点赞
朱丰华   |   1年前   |   php · 常量 · 扩展

php扩展中,取字符串常量的值

164    评论    点赞
朱丰华   |   1年前   |   php · 混淆 · obfuscate · git

php代码混淆yakpro-po

244    评论    点赞
朱丰华   |   2年前   |   php · composer · linux · 安装

linux下安装composer

176    评论    点赞
朱丰华   |   2年前   |   > · this · php · 使用 · 并发 · 文件 · 解决 · 问题 · db · 处理

php使用文件锁解决并发问题

91    评论    点赞
朱丰华   |   2年前   |   远程 · 添加 · 查看 · 删除 · git · 地址 · 多个 · url · githubcom · zhufenghua1998

git查看、添加、删除远程地址

71    评论    点赞
朱丰华   |   2年前   |   git · 改为 · 地址 · https · ssh

git 把地址从 https 改为 ssh

89    评论    点赞
朱丰华   |   2年前   |   模块 · 仓库 · git · 使用 · 目录 · 文件 · 修改 · 如果

git子模块的使用

61    评论    点赞
{{item.author_name}}   |   {{new Date(item.date*1000).log()}}   |   {{it}} ·

{{item.title}}

{{item.uv}}    评论    点赞