⑴ c语言中指针变量是存在哪里的
1、指针变量和普通的变量一样,编译期储存在代码当中,运行期间储存在内存里。c语言的变量值是通过该变量的内存地址寻址得到的,而对于一个已经编译好的程序,变量的地址都是确定的值,不可以更改。这是因为程序在编译时编译器已经通过语法分析把指针变量的地址值计算出来了,所以指针变量实际上不用保存在内存堆栈或数据段中,而是包含在汇编代码里面。
2、指针变量里面就是整型的一个十六进制数,用来表示的就是指向某个变量的地址;
指针是C语言中广泛使用的一种数据类型;
利用指针变量可以表示各种数据结构;
能很方便地使用数组和字符串;
并能象汇编语言一样处理内存地址,从而编出精练而高效的程序;
指针极大地丰富了编程语言的功能。
⑵ C语言中指针变量只能存储地址
指针变量是一个变量,它保存的是另一个变量的内存地址。你如果知道了这个指针变量保存的值,就可以知道它所指向变量的内存地址,于是就可以间接访问到那一个变量。
定义:指针变量类型
*指针变量名1,
*指针变量名2,
...
;
例如:
int
main(void)
{
int
*p;
/*定义*/
int
a;
p
=
&a;
/*把a的地址赋值到p中*/
*p
=
1;
/*间接访问a*/
return
0;
}
把指针作为函数的参数传递,可以使函数可以访问函数外部的变量,例如:
void
swap(int
*a,
int
*b)
{
int
c;
c
=
*a;
*a
=
*b,
*b
=
c;
}
指针也可以用于传递数组,数组名本身就是一个指针:
void
func(int
a[],
int
n)
{
.....
}
指针还可以指向指针,指向结构体(struct),指向数组
int
**p;
/*指向int指针*/
struct
xxx
*p;
int
(*p)[100];
/*指向一个int[100]数组,括号不可少*/
⑶ c语言中是变量存储地址还是地址存储变量啊
变量在内存中存储
每个内存位置都有一个编号,就是内存地址值
地址值,就是个整数,所以,也可以存储到变量中,C中的指针变量,就是专门用来存储地址的变量
。
⑷ 指针变量只能存放不能存放
指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是数据的地址。
举例:int a = 68 ,系统为变量a分配的首地址为0X065FDF4H,声明空指针long *p = NULL,p=&a是存放变量a地址的指针变量,即p=&a中存放的值为0x065FDF4H(a的值为68,&a的值为0x065FDF4H)。
如果一个指针变量存放的是某个对象的地址,则称这个指针变量指向该对象。在C++程序设计中,指针变量只有确定了指向才有意义。
(4)c语言中指针变量只能存储地址扩展阅读:
相关特点
指针是C语言的精华部分,通过利用指针,我们能很好地利用内存资源,使其发挥最大的效率。有了指针技术,我们可以描述复杂的数据结构,对字符串的处理可以更灵活,对数组的处理更方便,使程序的书写简洁,高效,清爽。
但由于指针对初学者来说,难于理解和掌握,需要一定的计算机硬件的知识做基础,这就需要多做多练,多上机动手,才能在实践中尽快掌握,成为C的高手。
过去,我们在编程中定义或说明变量,编译系统就为已定义的变量分配相应的内存单元,也就是说,每个变量在内存会有固定的位置,有具体的地址。由于变量的数据类型不同,它所占的内存单元数也不相同。
⑸ c语言中变量的指针,其含义是指变量的什么
指针变量是有加减运算的,但是要注意以下几点:
1.指针变量中存放的是地址值,也就是一个数字地址,例如某指针变量中的值是0x20000000,表示表示此指针变量存放的是内存中位于0x20000000地方的内存地址。指针变量可以加减,但是只能与整型数据加减,此时加减的含义并不是其地址值进行了加减,也就是说如果指针变量p的值是0x20000000,那么p=p+2;的值并不是0x20000002,并不是地址值的简单相加,那么地址值加减多少是与指针指向的数据类型相关联的,如果在32位的操作系统上,p是指向整型数据的指针变量,那么p=p+2之后,p的地址值变成0x20000008,也就说实际上地址值加了多少呢:sizeof(int)*2这么多。说明白点,我们加减的数字是以指针指向的数据类型为量度的,p+2表示p在内存中前移两个int的距离,如果p不是int类型,而是其他类型道理也是一样。同样指针与整型数据相减也是同样的道理。
2.指针之间可以相减,但不可以相加:两个同一类型的指针变量是可以相减的,他们的意义表示两个指针指向的内存位置之间相隔多少个元素(注意是元素,并不是字节数),例如对于int类型的指针p和p1.p1-p的意义表示他们之间相隔多少个int类型的元素。同样对于其他类型的指针变量之间相减的意义也是一样。指针变量的自加和自减实际上是与整数1的加减运算。
3.指针之间可以比较大小。但是同样也限于两个相同类型的指针变量,不同类型的指针变量之间比较大小没有任何意义。指针之间的大小比较的意义,表示在内存中他们指向的位置的高低关系。
⑹ c语言中 变量存储的是不是地址
变量存储的是对应类型的值,是否为地址同样取决于类型。
变量具有不同的类型。
整型变量int,存储的就是一个整数;float类型,存储的是实数;char类型,存储的是字符(实际上也是整数)。
指针变量,是C语言的特殊变量,其存储的是地址。在C语言中,只有指针是用来存储地址值的。
⑺ C语言,指针变量存在内存的什么地方
我认为指针变量就在代码中。
c语言的变量值是通过该变量的内存地址寻址得到的,而对于一个已经编译好的程序,变量的地址都是确定的值,不可以更改。这是因为程序在编译时编译器已经通过语法分析把指针变量的地址值计算出来了,所以指针变量实际上不用保存在内存堆栈或数据段中,而是包含在汇编代码里面。
而普通变量在数据段中
至于堆栈那是用来保存上下文、进程切换、以及传递参数的。
⑻ c语言中指针变量p初始化只能是地址,但也有给字符串的。为什么
字符串"type"在C语言中叫作字符串常量。
p="type";实际上就是让p指向这个字符串常量的首地址,
所以指针指向字符串的实质还是指向一个地址。
⑼ c语言:指针变量只能存放类型为‘’类型说明符‘’的变量的地址...这句话是什么意思
意思是指针里的值只能是地址。你大概是将其他类型赋值给指针的语句(比如p=1之类)。
⑽ C语言中不是说指针变量是存放某个变量地址不能存放常量吗
这两个程序都没有错误,没有不允许存放常量的要求。
第1个程序,给指针变量赋初值为0,意思是给定一个初始值用于以后判断指针是否有效,通常初始化会写成int *p=NULL;这个NULL就是0值,然后在程序中使用p之前要判断
if ( p==0 ) 出错处理; //或者 if ( p==NULL ) 出错处理;
这是一种使用指针的惯常做法。
左边图片中的试题是考验一个概念:不同对象变量的指针都是指针,都存放地址,因此地址占用的字节数是相同的,因此答案是A
右边图片中,严格来说,B是肯定没问题的,但D有可能正确,前提是x的地址恰好是1024,这种情况一般会出现在嵌入式设计(单片机等内存小的cpu)中,但多数情况D是会错的,除非有一系列其他语句(比如预处理语句等)配合才能实现正确。明确一点,这个错不是因为指针变量被赋值了一个常量引起的,而是程序设计者无法知道变量x的地址是哪一个数而写入程序。