c语言指针数组定义,c语言指针数组定义和赋值

kodinid 5 0

大家好,今天小编关注到一个比较意思的话题,就是关于c语言指针数组定义问题,于是小编就整理了5个相关介绍c语言指针数组定义的解答,让我们一起看看吧。

  1. C/C++关于指向指针的指针为什么可以用数组表示?
  2. 指向整型数组的指针如何用?
  3. c语言数组和指针谁先有?
  4. C语言的字符数组str[]的定义和用法?
  5. C语言中,指针和数组名有什么关系吗?

C/C++关于指向指针的指针为什么可以用数组表示

因为数组名就是指针常量,所有语法都是一样的 inta[10]; int*p=a; a[0]=12; p[1]=34; *(a+2)=56; *(p+3)=78; 唯一的区别是,定义数组同时会分配内存,指针使用前要赋值

指向整型数组的指针如何用?

数组指针(也称行指针)

c语言指针数组定义,c语言指针数组定义和赋值-第1张图片-安济编程网
图片来源网络,侵删)

定义 int (*p)[10];

()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是10,也可以说是p的步长。也就是说执行p+1时,p要跨过10个整型数据的长度。

例:
int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。
所以数组指针也称指向一维数组的指针,亦称行指针。

c语言指针数组定义,c语言指针数组定义和赋值-第2张图片-安济编程网
(图片来源网络,侵删)

指针数组


定义 int *p[n];
[]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素,这样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。
如要将二维数组赋给一指针数组:
int *p[3];
int a[3][4];
p++; //该语句表示p数组指向下一个数组元素。注:此数组每一个元素都是一个指针
for(i=0;i<3;i++)
p[i]=a[i]
这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2]
所以要分别赋值。

这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。

C语言30天核心突破

c语言指针数组定义,c语言指针数组定义和赋值-第3张图片-安济编程网
(图片来源网络,侵删)

c语言数组和指针谁先有?

先有c语言数组,当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。

ptr被置为数组str的第一个元素的地址,因为数组名就是该数组的首地址,也是数组第一个元素的地址。此时可以认为指针ptr就是数组str(反之不成立),这样原来对数组的处理都可以用指针来实现

C语言的字符数组str[]的定义和用法?

char*str[M]

这是定义了一个字符指针数组str,即str数组的每个元素都是一个指针,可以指向一个char地址。系统为它分配M个sizeof(int)长度的空间。

charstr[M][N]

这是定义了一个二维字符数组,可以存储M*N个字符,系统为它分配M*N个sizeof(char)长度的空间。

C语言中,指针和数组名有什么关系吗?

数组名并不完全等于常量指针,通常变量名在编译时转译为逻辑地址(偏移地址)从而在加载时直接确定物理地址;而指针的作用是在执行时有一个地址提领的环节,也就是把指针变量的值加到地址加法器的过程;所以在执行时指针操作比变量名操作多一个环节导致性能差点,而数组名是在编译时也是作为一个进程栈的偏移地址,有变量名的意义,而其元素地址获得需要在数组名偏移地址基础进行加减(编译时),因此也具有临时指针的作用,所以准确的说数组名应该叫做编译时的指针

到此,以上就是小编对于c语言指针数组定义的问题就介绍到这了,希望介绍关于c语言指针数组定义的5点解答对大家有用。

标签: 数组 指针 一个