将变量引用到现有数组
Referencing a variable to an existing array
我是 C 的新手,刚开始玩指针。我还没有找到将数组分配给多个变量的方法。
我理想中想要的是:
char myArray[10] = "test";
char (*p)[10] = &myArray;
char anotherArray[10];
anotherArray = *p;
这不起作用,我不知道为什么。
我找到了一种使用 for 循环 "copy" 数组的方法
for (int i = 0; i < 10; i++)
{
anotherArray[i] = myArray[i];
}
我不知道这样做是否是个好习惯,是否有更简单的方法。
数组内容不应该改变所以我只想有一个简单的方法来做到这一点:
firstArr[size] = "content";
secondArr = firstArr;
您不能在 C 中分配数组,无论是通过数组本身还是通过取消引用数组指针,语法根本不允许这样做。
数组通常用memcpy
复制。如果它们是字符串,您还可以使用 strcpy
,它会向上复制直到找到字符串空终止符。
在您的示例中,这将是 strcpy(anotherArray, *p);
。但是使用 char (*)[10]
类型的数组指针有点奇怪,使用指向数组第一个元素的指针更为常见。我建议您将代码更改为:
#include <stdio.h>
#include <string.h>
int main(void)
{
char input[10] = "test";
char* p = input;
char anotherArray[10];
strcpy(anotherArray, p);
puts(anotherArray);
}
不能将一个数组赋值给多个变量,但可以将多个变量赋值指向一个数组。
指针都是关于内存和它们指向的内存。
诸如此类的语句将固定数量的内存(10 char
大小的内存字节)分配给变量 myArray
并将内容初始化为包含 "test1".
char myArray[10] = "test1";
根据定义,myArray
实际上是指向第一个内存位置的指针,在本例中,它包含一个值为 't'
的字符,但它固定在该内存中。
您可以定义另一个指向 char 类型的指针,并为其分配与指向保存数据的内存的指针相同的值 "test1"
- 因此:
char *secondPtr = myArray;
现在secondPtr
和myArray
都指向同一个内存,其中包含"test1"
。没有数据的两个副本,但如果你这样做,它可能会出现
printf("myArray %s", myArray);
printf("secondPtr %s", secondPtr);
现在您可以使用 myArray
或 secondPtr
来更改相同的数据,这就是为什么要小心对待指针的原因。
现在 secondPtr 只是一个指向 char 的指针,因此它不像 myArray 那样固定,所以你可以这样做:
char myArray2[10] = "test2";
secondPtr = myArray;
printf("secondPtr %s", secondPtr);
secondPtr = myArray2;
printf("secondPtr %s", secondPtr);
要将数据从一个数组复制到另一个数组,您可以使用 memcpy,它将指定数量的内存字节(八位字节)从一个位置复制到另一个位置。
相同的过程由循环执行(这是基本代码,但实际上并不是执行它的最佳方式,因为没有检查数组的大小或循环迭代的次数)例如
for(int i=0; i<10; i++)
{
myArray2[i] = myArray[i];
}
这也可以是:
secondPtr = myArray2;
for(int i=0; i<10; i++)
{
myArray2[i] = secondPtr +i;
}
我是 C 的新手,刚开始玩指针。我还没有找到将数组分配给多个变量的方法。 我理想中想要的是:
char myArray[10] = "test";
char (*p)[10] = &myArray;
char anotherArray[10];
anotherArray = *p;
这不起作用,我不知道为什么。 我找到了一种使用 for 循环 "copy" 数组的方法
for (int i = 0; i < 10; i++)
{
anotherArray[i] = myArray[i];
}
我不知道这样做是否是个好习惯,是否有更简单的方法。
数组内容不应该改变所以我只想有一个简单的方法来做到这一点:
firstArr[size] = "content";
secondArr = firstArr;
您不能在 C 中分配数组,无论是通过数组本身还是通过取消引用数组指针,语法根本不允许这样做。
数组通常用memcpy
复制。如果它们是字符串,您还可以使用 strcpy
,它会向上复制直到找到字符串空终止符。
在您的示例中,这将是 strcpy(anotherArray, *p);
。但是使用 char (*)[10]
类型的数组指针有点奇怪,使用指向数组第一个元素的指针更为常见。我建议您将代码更改为:
#include <stdio.h>
#include <string.h>
int main(void)
{
char input[10] = "test";
char* p = input;
char anotherArray[10];
strcpy(anotherArray, p);
puts(anotherArray);
}
不能将一个数组赋值给多个变量,但可以将多个变量赋值指向一个数组。
指针都是关于内存和它们指向的内存。
诸如此类的语句将固定数量的内存(10 char
大小的内存字节)分配给变量 myArray
并将内容初始化为包含 "test1".
char myArray[10] = "test1";
根据定义,myArray
实际上是指向第一个内存位置的指针,在本例中,它包含一个值为 't'
的字符,但它固定在该内存中。
您可以定义另一个指向 char 类型的指针,并为其分配与指向保存数据的内存的指针相同的值 "test1"
- 因此:
char *secondPtr = myArray;
现在secondPtr
和myArray
都指向同一个内存,其中包含"test1"
。没有数据的两个副本,但如果你这样做,它可能会出现
printf("myArray %s", myArray);
printf("secondPtr %s", secondPtr);
现在您可以使用 myArray
或 secondPtr
来更改相同的数据,这就是为什么要小心对待指针的原因。
现在 secondPtr 只是一个指向 char 的指针,因此它不像 myArray 那样固定,所以你可以这样做:
char myArray2[10] = "test2";
secondPtr = myArray;
printf("secondPtr %s", secondPtr);
secondPtr = myArray2;
printf("secondPtr %s", secondPtr);
要将数据从一个数组复制到另一个数组,您可以使用 memcpy,它将指定数量的内存字节(八位字节)从一个位置复制到另一个位置。
相同的过程由循环执行(这是基本代码,但实际上并不是执行它的最佳方式,因为没有检查数组的大小或循环迭代的次数)例如
for(int i=0; i<10; i++)
{
myArray2[i] = myArray[i];
}
这也可以是:
secondPtr = myArray2;
for(int i=0; i<10; i++)
{
myArray2[i] = secondPtr +i;
}