C的指针疑惑:C和指针8数组

时间:2022-07-01 13:50:13
int a[];
int b[];

上面申明两个数组,不能进行以下赋值

b = a;

你不能使用赋值符把一个数组的所有元素复制给另一个数组,必须使用一个循环,每次复制一个元素

数组和指针

int a[];
int *b;

  声明一个数组,编译器将根据声明指定的元素数量为数组保留内存空间,然后再创建数组名,它的值是一个常量,指向这段空间的起始位置。

声明一个指针变量时,编译器只为指针本身保留内存空间,并不为任何整形值分配内存空间。

void strcpy(char *buffer,char const *string)
{
while((*buffer++ = *string++) != '\0')
;
}

注意:形参被声明为一个指向const字符的指针。对于一个并不打算修改这些字符的函数而言,是一个号习惯。

原因有:1.这是一样良好的文档习惯。有些人希望仅观察该函数的原型就能发现该数据不会被修改,而不必阅读完整的函数定义

  2.编译器可以捕捉到任何试图修改该数据的意外错误

  3.这类声明允许向函数传递const参数。

指向数组的指针:

int (*p)[10]:指向整形数组的指针。

可用于二维数组:

int matrix[3][10];

int (*p)[10] = matrix;

指针数组:

int *api[10];  //10个元素,每个元素都是一个指向整形的指针