如何通过 C 中的地址更改数组的变量?
How to change array's variables by address in C?
我正在尝试通过交换地址而不是值来更改数组的变量地址。
我有一个交换数组中数字的函数:
a[0]=a[9] , a[9]=a[0],
一个1=a[8] , a[8]=a1,
a[2]=a[7] , a[7]=a[2], ec`。
如果您查看图像,例如在数组 arr[0] = 33 中,地址为 00...E8。
我想将它与最后一个数字交换为 arr[0] = 10,地址为 00..0C。
现在我有 arr[0] = 10,地址 00...E8,我切换了值而不是地址。
我该如何实现?
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
void invert(int arr[], int size)
{
int n;
int temp;
for (n = 0; n < size / 2; n++)
{
temp = arr[n];
arr[n] = arr[size - 1 - n];
arr[size - 1 - n] = temp;
}
printf("after invertion");
printf("\n");
for (n = 0; n < 10; n++)
{
printf(" %d ", arr[n]);
printf(" %p\n", &arr[n]);
}
}
void main()
{
int arr[10];
int i;
srand(time(NULL));
for (i = 0; i < 10; i++)
{
arr[i] = rand() % 50;
}
printf("before invertion");
printf("\n");
for (i = 0; i < 10; i++)
{
printf(" %d ", arr[i]);
printf(" %p\n", &arr[i]);
}
printf("\n");
invert(arr, 10);
}
不能交换数组元素的地址。数组元素全部按顺序存储在内存中。如果一个整数在内存中占用 4 个字节,对于大小为 10 的数组,总共在内存中占用 40 个连续字节。数组 a
指向这 40 个字节的开始地址,当你索引它时,索引乘以 sizeof(int) = 4
。因此,a[1]
的地址等于a
的地址+4,a[9]
的地址等于a
的地址+9*4。
如图所示,数组元素的地址都是连续的,仅相差 4 个字节。例如,您可以说 a = a + 20
,这会导致 a[0]
指向 a[5]
,但随后数组元素的其余部分也会移位,并将指向之后的位置,如上文所述。从技术上讲,您只能更改数组开头指向的位置,而不能更改数组中间指向的位置。
我正在尝试通过交换地址而不是值来更改数组的变量地址。 我有一个交换数组中数字的函数: a[0]=a[9] , a[9]=a[0], 一个1=a[8] , a[8]=a1, a[2]=a[7] , a[7]=a[2], ec`。 如果您查看图像,例如在数组 arr[0] = 33 中,地址为 00...E8。 我想将它与最后一个数字交换为 arr[0] = 10,地址为 00..0C。 现在我有 arr[0] = 10,地址 00...E8,我切换了值而不是地址。
我该如何实现?
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
void invert(int arr[], int size)
{
int n;
int temp;
for (n = 0; n < size / 2; n++)
{
temp = arr[n];
arr[n] = arr[size - 1 - n];
arr[size - 1 - n] = temp;
}
printf("after invertion");
printf("\n");
for (n = 0; n < 10; n++)
{
printf(" %d ", arr[n]);
printf(" %p\n", &arr[n]);
}
}
void main()
{
int arr[10];
int i;
srand(time(NULL));
for (i = 0; i < 10; i++)
{
arr[i] = rand() % 50;
}
printf("before invertion");
printf("\n");
for (i = 0; i < 10; i++)
{
printf(" %d ", arr[i]);
printf(" %p\n", &arr[i]);
}
printf("\n");
invert(arr, 10);
}
不能交换数组元素的地址。数组元素全部按顺序存储在内存中。如果一个整数在内存中占用 4 个字节,对于大小为 10 的数组,总共在内存中占用 40 个连续字节。数组 a
指向这 40 个字节的开始地址,当你索引它时,索引乘以 sizeof(int) = 4
。因此,a[1]
的地址等于a
的地址+4,a[9]
的地址等于a
的地址+9*4。
如图所示,数组元素的地址都是连续的,仅相差 4 个字节。例如,您可以说 a = a + 20
,这会导致 a[0]
指向 a[5]
,但随后数组元素的其余部分也会移位,并将指向之后的位置,如上文所述。从技术上讲,您只能更改数组开头指向的位置,而不能更改数组中间指向的位置。