c语言指针的引用
❶ c语言指针引用数组元素,从p=a开始解释下此程序
1. p=a; //使int*指针p指向数组a的首元素,即a[0]的地址—&a[0]。
2. 第一个for循环语句,就是通过指针p来对数组a的各个元素赋初值,*p的意思就是获取指针p所指向的内存单元的值,初始就是对a[0]赋初值i,*p++=i,等价于:
*p=i; //对p指向的当前数组元素赋值,等价于a[i]=i;
p++; //指针p自增1,使指针p指向下一个数组元素
当初始化数组a完成后,
3. p=a; //使指针p重新指向数组a的首元素,即指向a[0]。
4. 第二个for循环,就是通过指针p输出数组a的所有元素到屏幕上了。
总结,通过指针来操作对象,是一种间接访问变量的方式,有很多的好处,这在以后的编程学习中你会慢慢体会到指针的妙处和精髓。
❷ C语言选择题 指针的引用怎么看
其实你的题目里面写法就有问题。
若有定义
int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;
A.*(p+i) B.*(a+i)
C.p[i] D. *a[i]
应该这样才对,然后题目定义的指针p指向数组a,也就是指向数组的第一个元素的地址。然后定义的变量i也没有具体赋值,后面就直接引用了。那我们就认为i为一个在这个题目里有效的数字。
A选项,是取内容,*(p+i)相当于取p指针往后移i个单位的那个地址的内容,是对的。
B选项,a是数组名是不可以改变的,a+i是错误的。
C选项,应该也是对的,除非他越界了。
D选项不需要取内容符号*。
❸ C语言中指针和引用的区别
指针,全称为指针变量,是用来存储内存地址的一种变量。程序中,一般通过指针来访问其指向的内存地址中的内容(数据)。
引用,是C++中提出来的一种新的使用变量的方式,即,给实际变量起个别名,通过这个别名来引用实际的变量。标准C中不支持变量的引用。
这两个概念没有任何相关性。
指针是实实在在的变量,有自己的内存存储空间,它可以指向任何有效的变量。
引用是一种形式、方法,定义的引用变量,实际上是原实际变量的另一个名称(别名),引用变量本身没有自己的实际存储空间,操作引用变量,就是在操作实际变量。
如:
❹ c语言中指针怎么使用
1、使用场景
使用指针时,必须将它指向一个变量的地址或者为它分配空间方能使用,如下所示:
#include<stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int a[5]={0,1,2,3,4};
int *b,*d;
int c=2;
int *e=a; //e指向a数组首地址
//*b=2; 无法直接初始化
//printf("%d ", *b);
e=e+2; //移动两个地址单元
d=&c; //d指向c的地址来表示值
c=4; //修改原c变量的值,d指针的值会发生改变
b=(int *)malloc(sizeof(int));//为b分配一个int型空间来直接存储值
*b=2;//分配空间后可以直接赋值了
printf("this is e,b,c,d :%d %d %d %d ",*e,*b,c,*d);
2、类型说明
(1)int *a :表示一个指向int型变量的指针,指向的是变量的地址单元
(2)char *b:表示一个指向char变量的指针
*a表示的是这个指针指向地址的值,a为此指针本身的地址,这点要明确,一般用*(a+1)、*(a+2)来表示值,如:
int nums[5]={0,1,2,3,4};
int *a=nums;
printf("%d %d %p ",*a,*(a+1),a);
(4)c语言指针的引用扩展阅读:
指针的运算
指针指向变量地址,若原变量的内容发生了变化,它本身也会发生变化,指针之间的运算一般为值运算和地址运算
(1)值运算:直接通过*运算方式,像a+*(a+1),结果为第一个元素与第二个元素相加。
int nums[5]={0,1,2,3,4};
int *a=nums;
(2)地址运算:通过a+i的方式.指针会指向a的下i个地址。
int nums[5]={0,1,2,3,4};
int *a=nums;
a=a+2;
printf("%d ",*a);
结果输出2。
参考资料来源 :指针-网络
❺ C语言指针怎么用
在c语言中.指针被用来表示内存单元的地址,如果把这个地址用一个变量来保存,则
这种变量就称为指针变量。指针变量也分别有不同的类型,用来保存不同类型变量的地址。
严格地说.指针与指针变量是不同的,为了叙述方便,常常把指针变量就称为指针。
内存是计算机用于存储数据的存储器,以字节作为存储单元.为了能正确的访问内存单
元,必须为每一个内存单元编号,这个编号就称为该单元的地址。如果将一个旅店比喻成内
存,则旅店的房间就是内存单元,房间号码就是该单元的地址。
指针变量定义格式:
[存储类型]
数据类型
*指针变量名[=初始值]
指针变量一旦定义,必须采用赋值的方式将其与某个变量实体相联系,才能使用。指针
变量的赋值方式:
指针变量名;&普通变量名;
❻ C语言指针/引用/取值
指针是一个存储计算机内存地址的变量。从指针指向的内存读取数据称作指针的取值。指针可以指向某些具体类型的变量地址,例如int、long和double。指针也可以是void类型、NULL指针和未初始化指针。
根据出现的位置不同,操作符 * 既可以用来声明一个指针变量,也可以用作指针的取值。当用在声明一个变量时,*表示这里声明了一个指针。其它情况用到*表示指针的取值。
&是地址操作符,用来引用一个内存地址。通过在变量名字前使用&操作符,我们可以得到该变量的内存地址。
// 声明一个int指针
int*ptr;
// 声明一个int值
int val = 1;
// 为指针分配一个int值的引用
ptr = &val;
// 对指针进行取值,打印存储在指针地址中的内容
int deref = *ptr;
printf("%d\n", deref);
第2行,我们通过*操作符声明了一个int指针。接着我们声明了一个int变量并赋值为1。然后我们用int变量的地址初始化我们的int指针。接下来对int指针取值,用变量的内存地址初始化int指针。最终,我们打印输出变量值,内容为1。
第6行的&val是一个引用。在val变量声明并初始化内存之后,通过在变量名之前使用地址操作符&我们可以直接引用变量的内存地址。
第8行,我们再一次使用*操作符来对该指针取值,可直接获得指针指向的内存地址中的数据。由于指针声明的类型是int,所以取到的值是指针指向的内存地址存储的int值。
说穿了,指针就是地址吧,这里可以把指针、引用和值的关系类比为信封、邮箱地址和房子。一个指针就好像是一个信封,我们可以在上面填写邮寄地址。一个引用(地址)就像是一个邮件地址,它是实际的地址。取值就像是地址对应的房子。我们可以把信封上的地址擦掉,写上另外一个我们想要的地址,但这个行为对房子没有任何影响。
❼ c语言 指针和引用
在定义中如int *p=&i;是定义了指针的同时给其赋值(p指针指向i),只有定义时可以这么写,在语句中*p=&i;则是将i的地址的代码给了*p,也就是p指针指向了i的地址,而不是i;只有*p=i才是p指针指向i;
printf("%d",&i);printf("%d",p);
的结果才是一样的,都是输出i的地址。
printf("%d",i);printf("%d",*p);
的结果是一样的,都是i的值。这一块内容就是复杂,希望这样解释你能明白。
❽ C/C++语言-指针与引用的区别
一、指针:
1.指针的定义:
指针作为实体,是一个用来保存一个内存地址的计算机语言中的变量。指针一般出现在比较底层的程序设计语言中,如C语言。高层的语言如Java一般避免用指针,而是引用。
指针作为数据类型,可以从一个函数类型、一个对象类型或者一个不完备类型中导出。从中导出的数据类型称之为被引用类型(referenced type)。指针类型描述了一种对象,其值为对被引用类型的实体的引用。
2.* 和 &符号
这个时候能改变a的值,而
改为
就无法改变a的值。
在执行inc(&a);时,系统在内存分配表里增加了一行“inc 中的val”,其地址为新地址,值为&a。操作*val,即是在操作a 了。
二.引用
1.引用的定义:
(1)引用就是某个目标变量的“别名”,对应用的操作与对变量直接操作效果完全相同。
(2)申明一个引用的时候,切记要对其进行初始化。
2.引用的特点:
(1)传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。
(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数。因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。
(3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。而引用更容易使用,更清晰。