为什么在 void 函数内部更改时变量值没有得到更新?
Why is the variable value not getting updated when changed inside void function?
在此数组插入代码中,当我在 void insert
函数中递增时,usedsize
的值不会更新。我想知道为什么这种情况一直发生,为什么 arr[i]
的值在没有更新时得到更新?
#include <stdio.h>
#include <stdlib.h>
void insert(int arr[], int element, int index, int usedsize){
for(int i=usedsize;i>=index;i--){
arr[i+1]=arr[i];
}
arr[index]=element;
usedsize++;
}
void traverse(int arr[], int size){
for(int i=0;i<size;i++){
printf("%d",arr[i]);
printf("\t");
}
}
int main()
{
int narr[25]={5,7,12,34,45};
int index = 3;
int usize = 5;
int element = 21;
insert(narr,element,index,usize);
traverse(narr,usize);
return 0;
}
正如评论者指出的那样,insert
函数中的变量 usedsize
是一个副本。
why does the value of arr[i] get updated?
在 C 中,数组名表示第一个元素的地址,并且数组始终作为指针传递,即使您使用方括号表示法 0.
#include <stdio.h>
#include <stdlib.h>
void insert(int arr[], int element, int index, int *usedsize) {
printf("Address arr[%d] is %p\n", 0, &arr[0]);
printf("Address usedsize is %p\n", usedsize);
for(int i=*usedsize; i>=index; i--) {
arr[i+1]=arr[i];
}
arr[index]=element;
(*usedsize)++;
}
int main()
{
int narr[25]= {5,7,12,34,45};
int index = 3;
int usize = 5;
int element = 21;
printf("Address arr[%d] is %p\n", 0, &narr[0]);
printf("Address usize is %p\n", &usize);
insert(narr,element,index,&usize);
traverse(narr,usize);
return 0;
}
Original code:
- Address arr[0] is 0x7ffdf2f8b510
- Address usize is 0x7ffdf2f8b504
- Address arr[0] is 0x7ffdf2f8b510
- Address usedsize is 0x7ffdf2f8b4cc
Now:
- Address arr[0] is 0x7fff0c03d740
- Address usize is 0x7fff0c03d734
- Address arr[0] is 0x7fff0c03d740
- Address usedsize is 0x7fff0c03d734
在此数组插入代码中,当我在 void insert
函数中递增时,usedsize
的值不会更新。我想知道为什么这种情况一直发生,为什么 arr[i]
的值在没有更新时得到更新?
#include <stdio.h>
#include <stdlib.h>
void insert(int arr[], int element, int index, int usedsize){
for(int i=usedsize;i>=index;i--){
arr[i+1]=arr[i];
}
arr[index]=element;
usedsize++;
}
void traverse(int arr[], int size){
for(int i=0;i<size;i++){
printf("%d",arr[i]);
printf("\t");
}
}
int main()
{
int narr[25]={5,7,12,34,45};
int index = 3;
int usize = 5;
int element = 21;
insert(narr,element,index,usize);
traverse(narr,usize);
return 0;
}
正如评论者指出的那样,insert
函数中的变量 usedsize
是一个副本。
why does the value of arr[i] get updated?
在 C 中,数组名表示第一个元素的地址,并且数组始终作为指针传递,即使您使用方括号表示法 0.
#include <stdio.h>
#include <stdlib.h>
void insert(int arr[], int element, int index, int *usedsize) {
printf("Address arr[%d] is %p\n", 0, &arr[0]);
printf("Address usedsize is %p\n", usedsize);
for(int i=*usedsize; i>=index; i--) {
arr[i+1]=arr[i];
}
arr[index]=element;
(*usedsize)++;
}
int main()
{
int narr[25]= {5,7,12,34,45};
int index = 3;
int usize = 5;
int element = 21;
printf("Address arr[%d] is %p\n", 0, &narr[0]);
printf("Address usize is %p\n", &usize);
insert(narr,element,index,&usize);
traverse(narr,usize);
return 0;
}
Original code:
- Address arr[0] is 0x7ffdf2f8b510
- Address usize is 0x7ffdf2f8b504
- Address arr[0] is 0x7ffdf2f8b510
- Address usedsize is 0x7ffdf2f8b4cc
Now:
- Address arr[0] is 0x7fff0c03d740
- Address usize is 0x7fff0c03d734
- Address arr[0] is 0x7fff0c03d740
- Address usedsize is 0x7fff0c03d734