×

数组赋值给指针 数组

对于指针类型数组的赋值,应该怎么赋值?数组长度为什么不能是变量

admin admin 发表于2022-07-13 10:58:51 浏览122 评论0

抢沙发发表评论

对于指针类型数组的赋值,应该怎么赋值


指针类型数组?里面存指针就好了啊,比如int *a ;
这个a就是一个int*型数组,里面存的是指向int型数据的指针。
比如int *b=NULL; int c; b=&c
然后你就可以a里面存的就是指向c的指针b。
这种用法需要特别小心,一般建议对指针数组加上const限定符以防止意外修改。
如果你想要的是指向int型数组的指针,声明的时候要用int (*a) ;
如果你要用的话,首先要对*a初始化,然后让它指向目标数组。
比如int b ; a=b;
用的时候*(a+1)=10; 相当于b=10;
特别需要注意的是,小心数组越界的问题。

数组长度为什么不能是变量

数组的大小不能用变量表示,因为内存应根据您在编译连接期间制定的长度分配相应的内存空间为数组。如果是变量,则无法分配它。您可以使用符号常数来解决它。开始时使用:

#定义M 100

#定义n 100,然后可以在程序中定义u两个维数组。当它不一定是100时,它可能是任何积极的整数。

在C语言中,所有变量空间都应用于程序开头(包括和指针)的系统,也需要空间。除了一些动态应用方法(例如Malloc函数)外,不允许没有应用程序的空间系统读取和写入。它不能应用,因此不允许。该解决方案如前所述,为:-数组赋值给指针

int a;

可以更改为

int* const a = (int*)malloc(sizeof(int)*n);

这样,一个变量可以直接用作数组,包括奖金运算符中的地址数量,“仅抵消其中的地址数量。例如,

一个

相当于

*(a + 1)

在const修饰符处于星号之后,这意味着指示器在声明后不能更改,也就是说,只能指向所获得的空间,这完全符合数组的性质。

数组越界怎么处理


1、什么是数组访问越界?
我们通过数组的下标来得到数组内指定索引的元素。这称作对数组的访问。
如果一个数组定义为有n个元素,那么,对这n个元素(下标为0 到
n-1的元素)的访问都合法,如果对这n个元素之外的访问,就是非法的,称为“越界。
数组占用了一段连续的内存空间。然后,我们可以通过指定数组下标来访问这块内存里的不同位置。因此,当你的下标过大时,访问到的内存,就不再是这个数组“份内”的内存。你访问的,将是其它变量的内存了。
2、访问越界会出现什么结果?
首先,它并不会造成编译错误!就是说,C,C++的编译器并不判断和指出你的代码“访问越界”了。一个明明是错误的东西,就这样“顺利”地通过了编译。数组访问越界在运行时,它的表现是不定的,有时似乎什么事也没有,程序一直运行(当然,某些错误结果已造成);有时,则是程序一下子崩溃。因此在使用数组时,一定要在编程中判断是否越界以保证程序的正确性。
常见的错误就是数组的size值和下标访问值弄错,数组的下表是从0开始的,最大的访问值是size-1。
3、解决办法
由于数组的元素个数默认情况下是不作为实参内容传入调用函数的,因此会带来数组访问越界的相关问题,解决问题方法,可以用传递数组元素个数的方法即:用两个实参,一个是数组名,一个是数组的长度。
举例:
#include《stdio.h》
void PutArray(int *p, int length)
{
// 在此判断入口参数p和length的有效性
……
for(int
i=0;i《length;i++)
printf(“%d\t“,p);
}
void main()
{
int a={2,4,6} ;
printf(“数组a调用函数PutArray的结果为:\n“);
PutArray(a,
sizeof(a)/sizeof(a));
}
-数组