如何取指针变量的地址?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何取指针变量的地址?相关的知识,希望对你有一定的参考价值。
现在的情况是,uchar *L=LOW[0];我要取的是指针变量L的地址,不是指针变量中保存的LOW[0]的地址,我在C51中用&L,取出来的不知道是什么值,跑飞了,应该怎么做?
取任何变量的地址,只需要使用取地址运算符——&即可。比如
int i;char *p; //定义一个字符指针
struct test o_o;
都可以通过&取地址运算符操作。
int *pi = &i;char **px = &p; //保存指针变量的地址记得使用 两个*号表明是一个指向指针的指针
struct test *ps = &o_o; 参考技术A 这样做应该是可以的,&L。 你取出来的地址应该用%p输出。如果要把这个地址赋给变量的话,变量得是长整形。追问
意思是,即使指针变量是uchar型的,他自身的地址是16位而不是uchar的8位?
追答是啊,任何地址都是长整形的
追问干的,难怪我一直错,教科书上没重点提到,
追答客气了,有问题还可以问我,大家一起讨论。
本回答被提问者采纳 参考技术B 首先,要在L中存LOW[0]的地址应该这样写,uchar *L = LOW,或者 uchar *L = &LOW[0],其次取L的地址是&L没错,跑飞的话,具体没有代码就不知道什么问题了,不过注意的是&L是16位的,要用int存储C-学会使用指针
先说:唯手熟尔
指针
- 指针存储着一个内存空间的地址
- 定义一个指针
int a;
int * p;
定义一个指针,只需在变量前面加一个 * 号。这里的指针只能存储一个存放整数的内存空间的地址
- 指针如何存储地址
p = &a;
&叫取地址符。这样整形指针p获得了整型变量a的地址。理解为指针p指向了整型变量a
- 可以通过指针p来操作变量a。
例如,输出变量a的值
int a=10;
int * p;
p=&a;
printf("%d",* p);
这里的 * 号是间接访问运算符。作用是取得指针p所指向的内存中的值。
- C语言中 * 号有三个用途
- 乘号。加减乘除
- 声明指针变量。在定义指针变量时使用,如:int * p;
- 取得指针所指向的内存中的值。简介访问运算符。例如printf("%d",* p);
malloc函数
- 在内存中存储整数10
- int a=10;
- malloc(4);
- 使用malloc函数会从内存中申请分配指定字节大小的内存空间。此处申请的是4个字节。不知道int类型4个字节还可以通过sizeof(int)获取int类型所占字节数。申请好4个字节空间后,就需要用一个指针来指向这个空间。
int * p;
p=(int * )malloc(sizeof(int));
需要注意的是,malloc函数返回类型是void * 类型。void * 表示未确定类型的指针。在C语言和C++,可被强制转换为任何其他类型的指针。此处我们将其强制转化为整形指针
- 指针存储的是某空间地址,那为什么分不同类型的指针呢?
是为了让系统知道某空间应该取多少个连续内存作为一个数据。 - 例子
存储整数10的代码如下
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *p;
p=(int * )malloc(sizeof(int));
* p=10;
printf("%d",* p);
return 0;
}
- 为什么要用如此复杂的办法存储数据?
预先的方法我们必须预先准确的知道所需变量的个数,也就是说我们必须定义出所有变量。定义一百个,程序就只能存储一百个。通过malloc函数我们可以在程序运行的过程中根据实际情况来申请空间
最后:个人觉得指针和malloc函数谁都离不开谁。malloc申请的内存需要指针指示,而指针用来指示一个不确定的空间才发挥了真正作用。
以上是关于如何取指针变量的地址?的主要内容,如果未能解决你的问题,请参考以下文章
大一C语言学习笔记---指针篇--什么是指针?什么是指针变量?取地址符“&”的作用是什么?地址运算符“*”的作用是什么,怎么理解两者?