c语言数组指针
数组指针是指向这个数组首地址的指针,指向对象是这个数组;
指针数组是存放一类指针的数组,这个数组的每个元素都是一个指针;
例子:
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的地址
应该算比较明白了吧
谢楼上提醒
p是int类型指针,指向数组a的第1个元素即一个一维的数组{1,2,3}首地址所以p[1]相当于a[0][1]所以printf("%d
",p[1]);
输出2 。 int **pp =pa 是声明了一个指向pa的指针,而pa又是指向a首地址的int类型指针。pa指向的是a的第一维,pa[0] = a[0] ,pp[2][1]相当于a[2][1]而a数组的[2]中只初始化了[2][0]位置的7,那[2][1]位置就是默认的值0,所以printf("%d
",pp[2][1]);
输出0
③ 指向iArray[1]输出4 (因为②时p已经成了1,p+2就是3,iArray[3]就是4)
④ 指向iArray[0]输出2 (因为*(p--)相当于 *(p) ;p--; 是先取值, 然后自减,自减后p=0)
/******
④有异议 不管怎么样, 输出的都是2 ,因为假如是 printf("%d",$(p--)); 则是 printf("$d,$p");p--; 就是输出的时候, p是指向iArray[1], 但是输出后就变成了指向iArray[0]了,-----------这里问的p指向:如果是输出时的指向, 就是iArray[1],如果是输出后的指向, 就是iArray[0] ,因为这里先问的输出,又问的指向,所以当作是输出后指向 所以是iArray[0]
*******/
⑤ 指向iArray[0]输出1 (因为*p++ 是得到p指向的值之后,把那个值自加 ,但是*p++是先使用*p然后*p自加所以输出的时候还是*p的内容 ,但是注意, 这时*p已经是2了,也就是iArray[0]从1变成了2)
⑥ 指向iArray[0]输出2 (因为p是指向数组的索引0的位置,⑤中指针位置没变,变得是里面的值,本来是1, ⑤之后变成了2)
⑦ 指向iArray[0]输出3 (因为++(*p)是取出*p之后, 自加, 然后输出,所以*p是2 2++是3)
⑧ 指向iArray[0]输出3 (⑦中没改变指针, 只改变了指针指向的位置的值, 是⑦中2++的结果,是3)
/*
这里考验的是i++ 和++ i的区别
比如 a=i++; 相当于 a=i; i++;
而 a=++i ; 则相当于 i++;a=i;
一个是先赋值再递加,一个是先递加再复制
另一个是考*p++和*(p++)的区别, *p++改变的是*p的值就是指针指向的值 , 而*(p++)改变的是p的值
*/
c语言数组和指针的区别
C语言中的数组和指针虽然有一定的相关性,但它们是两个不同的概念。首先,数组是一种数据结构,它用于存储一系列相同类型的数据元素。在C语言中,数组的大小是固定的,一旦声明,其长度就不能改变。数组名代表数组首元素的地址,但这个地址是常量,不能被修改。例如,我们声明一个整型数组`int arr[5]...
c语言中的数组和指针的区别
指针在C语言中具有非常重要的作用,因为它们提供了一种间接访问数据的方式。指针可以指向任何类型的数据,包括基本数据类型、结构体、联合体等。一个关键的区别是,指针可以被重新赋值以指向不同的内存地址,而数组名作为地址则是固定的。例如,`int *p = &someIntVariable;`这里`p`是一个指向整型的指针...
c语言中的数组和指针有什么区别
C语言中的数组和指针虽然有时可以相互转换和使用,但它们本质上是两个不同的概念。首先,数组是一个固定大小的数据结构,用于存储相同类型的元素集合。数组的大小在声明时就已经确定,不能在运行时更改。每个元素在内存中是连续存储的,可以通过索引直接访问。例如,`int arr[5];` 声明了一个包含5个整...
什么是指针数组
在C语言语言中,数组元素全为指针的数组称为指针数组。指针数组可以作为函数的参量使用,使用方式与普通数组类似。数组指针是指向数组首元素的地址的指针,其本质为指针,指针存放的是数组首地址的地址,相当于2级指针,这个指针不可移动。指针数组是数组元素为指针的数组,其本质为数组。指针数组常适用于指...
c语言数组和指针的区别
C语言中,数组和指针是两个不同的概念,它们之间存在显著的区别:定义与本质:数组是一种数据结构,用于存储固定数量的同类型元素的连续内存块。而指针是一个变量,其值是一个内存地址,用于指向内存中的某个位置。内存分配:数组在编译时分配内存空间,其大小在声明时确定且固定不变。指针本身只占用固定...
c语言中的数组和指针有什么区别
C语言中的数组和指针是两个不同的概念,它们在多个方面存在显著差异。首先,数组是一种数据结构,用于存储固定数量的同类型元素的连续内存块。数组名在大多数上下文中代表数组首元素的地址,这个地址可以赋值给一个指针变量。然而,在取地址操作或sizeof操作符等特定上下文中,数组名则代表整个数组。指针则...
c语言中的数组和指针的区别
C语言中的数组和指针在多个方面存在显著的区别。首先,定义上,指针是一个变量,它包含并存储了另一个变量的内存地址,而数组则是若干个相同数据类型的元素在连续内存中的集合,数组名在大多数情况下可以视为指向数组首元素的指针。其次,在内存管理方面,数组在编译时就已经确定了大小和类型,其内存分配...
C语言基础:指针数组与数组指针
一、指针数组 在这一部分,我们将探讨一种特殊的数组——指针数组。这种数组既特殊又普通。它的特殊性在于数组中的元素都是指针型变量,而普通性则是因为数组变量本身与普通变量并无太大区别。指针变量可以存储内存地址,因此可以被定义为一组连续的变量集合,这个集合即指针数组。例如,我们可以定义一组...
C语言重难点01-关于数组、指针、递归、结构体
深入理解C语言:数组、指针、递归与结构体 在C语言的世界里,基础概念是理解高级特性的关键。本文将带你探索数组、指针的奥秘,以及它们在递归和结构体中的应用。1. 数组与指针基础 数组是连续存储相同类型元素的集合,如 int arr[5]。数组初始化可以不完全指定长度,如字符串形式。sizeof 用于获取数组...
C语言中的指向数组的指针怎么理解?
虽然数组名是指针,但它是一个指针常量。也就是说,不带下标的数组名不能作为左值。指针是一种数据类型,所以,我们可以用指针类型来创建一个数组。声明一个指针数组的语句格式是:指针类型 * 数组名[常量表达式];对指针数组的操作和对指针变量的操作并无不同....
枝侧紫逗: 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.
礼泉县17522477608: C语言中的指针数组是什么意思?我对这个概念很混乱,指针数组的定义,作用,使 - ?
枝侧紫逗: 指针数组:就是存储指针的数组.数组指针:就是指向数组的指针.指针:本质就是一个int型变量,含义:一个内存地址.举例:int *p[10] 指针数组.原因:因为[的优先级比*高,p先和[结合,所以是指针数组.等同于int* p[10].int (*p)[10] 声明了一个指针P,指向有10个元素的数组.如果 int* p;就是声明了一个指向int变量的指针P.同理.int (*p)[10] 声明一个指向int[10]的数组.
礼泉县17522477608: 关于C语言数组指针的应用 - ?
枝侧紫逗: 应该会有的,这个叫行指针 它指向的数组是有10个元素的数组 int b[10],c[11]; int (*a)[10] = &b;//编译通过 int (*d)[10] = &c;//编译不通过
礼泉县17522477608: c语言数组指针?
枝侧紫逗: *p=a //是指针p指向a数组的首地址,也就是数组的第一个元素; for在循环的时候指针p++ 不断的向后指向,所以结果就为 13579
礼泉县17522477608: 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) ...
礼泉县17522477608: C语言中指针数组是什么意思? - ?
枝侧紫逗: int *p[n];-----指针数组,每个元素均为指向整型数据的指针. int (*)p[n];------p为指向一维数组的指针,这个一维数组有n个整型数据. int *p();----------函数带回指针,指针指向返回的值. int (*)p();------p为指向函数的指针.
礼泉县17522477608: 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 = ...
礼泉县17522477608: C语言中,如何定义一个'指针数组',这个'指针数组'专门用来存放'数组指针'. - ?
枝侧紫逗: 指针数组定义int*p[n]; []优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素.这里执行p+1时,则p指向下一个数组元素, 这样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p...
礼泉县17522477608: C语言指针的用法 - ?
枝侧紫逗: #include<stdio.h> #include<math.h> #include <conio.h> void sort(char *a[],int n) { int i,j; char *temp; for(i=0;i<n;i++) for(j=i+1;j<n;j++) if(strcmp(a[i],a[j]<0)) { temp=a[i]; a[i]=a[j]; a[j]=temp; } }int main() { char *a[3]; int i; for(i=0;i<3;i++) a[i] = (char *)malloc(...
礼泉县17522477608: C语言数组指针?
枝侧紫逗: (*P)[3]准确的说是一个行指针.它指向的是一个数组.因为【3】定义了它是一个3列的数组,所以当P+1的时候是数组移动3个单元.注意,是数组移动,不是数组元素