C语言数组指针?
1、指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置(地址);数组的本质则是一系列的变量。
2、数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。
3、当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
数组指针是指向这个数组首地址的指针,指向对象是这个数组;
指针数组是存放一类指针的数组,这个数组的每个元素都是一个指针;
例子:
int
a[10];
int*
s;
s
=
a;//这里s就是一个数组指针,它的值就是数组a
的首地址;当然,如果a是一个整数,那s就是一个指向整型的指针;
int
a;
int*
s[5];
for(int
i=0;i<5;i++)s[i]=a;
//这里s就是一个指针数组,它的每个元素都是整型变量a的地址
int (*pstu)[4]; 为指向有4个元素的数组的指针
int* getPosPerson(int pos, int (*pstu)[4]); 为返回值为指针的函数
注意这是指针函数,而不是函数指针,后者为指向函数的指针变量,两者含义是不同的
(类似指针数组和数组指针,两者含义也是不同的,一个本质是数组,一个本质是指针)
调用该函数的语句为:ppos = getPosPerson(pos, scores);
传入的scores表示3行4列的二维数组首行数组的地址,即&scores[0]
调用后相当于int (*pstu)[4]=scores,所以在getPosPerson中pstu与scores是等价的
即pstu可看作&scores[0],那么pstu+pos也就等价于scores+pos,等价于&scores[pos]
即返回了指向&scores[pos](也就是scores第pos+1行的地址)的指针
返回该行指针ppos 后,就可以查看该行表示的学生的4科成绩了
指针与数组的区别和联系
总结:不仅数组有指针,所有变量都有指针,指针说白了就是内存中的地址,就像一个房间必须有一个房间号。在C\/C++语言中定义一个指针,就是在栈区开辟一个内存空间用来存放它指向的内存地址,然后给指针赋值,就是把地址值赋值给刚才开辟的内存空间,然后通过访问该内存中的地址值来间接访问该地址下存放...
在C 语言中 “指针和数组等价” 到底是什么意思?
在 C 语言中对数组和指针的困惑多数都来自这句话。说数组和指针 “等价”不表示它们相同, 甚至也不能互换。它的意思是说数组和指针的算法定义可以用指针方便的访问数组或者模拟数组。特别地, 等价的基础来自这个关键定义:一个 T 的数组类型的左值如果出现在表达式中会蜕变为一个指向数 组第一个成员...
C语言中:数组指针与指针数组有什么区别?
数组指针是指向这个数组首地址的指针,指向对象是这个数组;指针数组是存放一类指针的数组,这个数组的每个元素都是一个指针;例子:int a[10];int* s;s = a;\/\/这里s就是一个数组指针,它的值就是数组a 的首地址;当然,如果a是一个整数,那s就是一个指向整型的指针;int a;int* s[5];for...
C语言数组指针?
指针类型不一样。p要是++就一口气蹦过5个,p2要是++就一口气蹦过10个……类型很重要。类型很重要。类型很重要。
C语言数组指针问题?
首先你要明白一点,数组名和指针本质上是一回事,都是地址,该数组的首地址。知道这一点后就可以活学活用了。这是c语言的精髓。比如你定义了int p,a[10];并且让p=a;,这个操作叫做指针p指向了数组a,其本质是给p这个变量付了一个值,就是数组a的地址,也是a[0]的地址,也是a本身里面存储的...
c语言指针与数组,怎么联系起来?
;数组的本质则是一系列的变量。2、数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。3、当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
c语言如何将一个数组按照指针排序?
方法有很多:1、可以直接找到数组对应行的元素,进行交换数据,改变原数组内容。2、可以定义指针数组指向每行的首地址,交换指针地址,按顺序打印每个指针为首的行数据,得到数据交换效果,原数组内容不变。我这里用第2种方法给你写了一个,你参考吧。include <stdio.h>int main (){ int nArry[4]...
C语言中,数组和指针定义在内存方面的区别在哪?
3,指针通常用于动态数据;数组通常用于固定数目和类型的一组数据 4,定义指针变量并不会带来内存分配,要自行分配内存并且将指针变量的内容改写为分配好的地址,通常用内存分配函数如malloc达到;定义数组会隐式分配内存 5,对sizeof操作符的返回值影响,sizeof(指针)永远会返回平台指针大小,通常32位机...
数组指针C语言的问题,这道题的cd选项等效成什么?
(1) int (*cp)[5], 这里有小括号,所以 cp 是1个指针,(又叫行指针),注意,是一个指针,后面[5]表示这个指针用于指向有5列的2维数组。 cp=c; 说明,c 是2维数组,它每行有5列元素,现在让cp指向了第一行。 cp=&c[0][0]; 若 cp+j 则指向 第 j 行。(2) C语言中...
c语言 字符数组 字符指针 sizeof strlen 的区别
c语言 字符数组、字符指针、sizeof strlen的区别为:数据长度不同、操作不同、所占空间不同。一、数据长度不同 1、字符数组:字符数组需要在初始化时就定义字符数组的数据长度。2、字符指针:字符指针的数据长度由指针指向的字符数据决定。3、sizeof strlen:sizeof strlen自动确定sizeof strlen的数据长度...
项辉利血: char str[100]; char *pi=str; //相当于char *pi ;pi=str; char **ppi=*pi;//这个地方抄错了.应为char **ppi=π定义加*表明这是指针类型的变量 用的时候,就是用的指针,加*干什么.只有取指针所指变量的值,或给指针所指的变量赋值的等涉及指针所指的变量的时候,才会又加*号,表示获取或改变,指针所指变量的值.char x=10;*pi =x; //给指针所指的变量赋值,改变指针所指变量的值(改变*pi) .x=*pi; //取指针所指的值,取指针pi所指的变量的值(表示为*pi)赋值给x.
枣阳市13876157023: C语言中指针数组是什么意思? - ?
项辉利血: int *p[n];-----指针数组,每个元素均为指向整型数据的指针. int (*)p[n];------p为指向一维数组的指针,这个一维数组有n个整型数据. int *p();----------函数带回指针,指针指向返回的值. int (*)p();------p为指向函数的指针.
枣阳市13876157023: c语言数组指针?
项辉利血: *p=a //是指针p指向a数组的首地址,也就是数组的第一个元素; for在循环的时候指针p++ 不断的向后指向,所以结果就为 13579
枣阳市13876157023: C语言数组指针 - ?
项辉利血: #include#define STU 3#define GRA 4 void search(float gra[][GRA],int stu); void print(float gra[][GRA],int i); int main(void) { float gra[STU][GRA] = {0}; int i; int j; int a = 0; for(i = 0;i{ //输入学生成绩 printf("请输入第%d位学生成绩:\n",i+1); for(j = ...
枣阳市13876157023: C语言中,如何定义一个'指针数组',这个'指针数组'专门用来存放'数组指针'. - ?
项辉利血: 指针数组定义int*p[n]; []优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素.这里执行p+1时,则p指向下一个数组元素, 这样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p...
枣阳市13876157023: c语言 数组指针 急急急 - ?
项辉利血: 分析,指针数组,首先 关键点是数组,所以首先是一个数组,数组元素是指针,所以选D,第一次遇见A的写法,不过个人觉得A的写法就是D的解释,. 其他解释, A 与D等效. B 是整形数组,很普通的数组. C是数组指针,指针指向的类型是 5个整形数组类型 (指向 这种类型 int ( ) [5] ) D 是指针数组 ,数组名ptr 元素5个,元素类型 是 int * 类型(指针类型,因此叫指针数组) . 如有错误,请原谅.
枣阳市13876157023: C语言数组指针?
项辉利血: (*P)[3]准确的说是一个行指针.它指向的是一个数组.因为【3】定义了它是一个3列的数组,所以当P+1的时候是数组移动3个单元.注意,是数组移动,不是数组元素
枣阳市13876157023: C语言中的指向数组的指针怎么理解? - ?
项辉利血: 要点:理解数组名其实就是一把指针!它指向所有元素的第一个int a[10]; 则它的内存分布:a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 数组名 a 就是指向了第一个元素 a[0] 的地址(注意是地址)所以上面的也可表示为: *(a+0) *(a+1) *(a+2) ...
枣阳市13876157023: C语言中的指针数组是什么意思?我对这个概念很混乱,指针数组的定义,作用,使?
项辉利血: 指针数组:就是存储指针的数组.数组指针:就是指向数组的指针.指针:本质就是一个int型变量,含义:一个内存地址.举例:int *p[10] 指针数组.原因:因为[的优先级比*高,p先和[结合,所以是指针数组.等同于int* p[10].int (*p)[10] 声明了一个指针P,指向有10个元素的数组.如果 int* p;就是声明了一个指向int变量的指针P.同理.int (*p)[10] 声明一个指向int[10]的数组.
枣阳市13876157023: C语言中 数组指针的意义 - ?
项辉利血: 数组的操作:起始地址加偏移来访问具体区域 指针操作:当前地址直接寻址,地址操作可以实现++,--这样的操作,这种操作要比起始地址与偏移的加法更加节省时间(一般都有单周期指令与之配合),因此用指针访问数组中的数据要更加效率,适合处理像图像这样的大数据量对象.