据我所知,当我们想在函数外部更改变量的值时,必须使用指针,如下所示:
https://www.tutorialspoint.com/cprogramming/c_function_call_by_value.htm。
但是我不明白为什么我能够在函数内更改变量name
的值。
#include<stdio.h>
#include<string.h>
#pragma warning(disable:4996)
#define MaxNameSize 14
#define MaxNamebuffer MaxNameSize+1
#define MaxNames 8
int main()
{
void StringInsertionSort(int, int, int max, char [][MaxNamebuffer]);
char name[MaxNames][MaxNamebuffer] = { "Taylor, Victor","Duncan, Denise","Ramdhan, Kamal","Singh, Krishna","Ali, Mechael","Sawh, Anisa","Khan, Carol","Owen, David" };
StringInsertionSort(0, MaxNames - 1, MaxNamebuffer, name);
printf("\nThe sorted names are:\n\n");
for (int h = 0; h < MaxNames - 1; h++)
{
printf("%s \n", name[h]);
}
return(0);
}
void StringInsertionSort(int lo,int hi,int max, char list[][MaxNamebuffer])
{
char key[MaxNamebuffer];
for (int h = lo + 1; h <= hi; h++)
{
strcpy(key, list[h]);
int k = h - 1;
while (k >= lo && strcmp(key, list[k]) < 0)
{
strcpy(list[k + 1], list[k]);
--k;
}
strcpy(list[k + 1], key);
}
}
答案 0 :(得分:3)
在您的代码char list[][MaxNamebuffer]
的参数上下文中,char (*list)[MaxNamebuffer]
与list
相同,并且两者均表示MaxNamebuffer
是指向{{1}的数组的指针 }字节。
答案 1 :(得分:0)
name
存储在read_write
内存中,只要将其作为参数传递,就可以在程序的任何位置进行访问。
例如,当您将数组作为name
而不是name[x][y]
传递时,它被视为一个指针,指向该数组的第一个元素并使程序能够写入该数组。
或者,传递(name + 2)
将具有传递指向name
的2 + 1元素的指针的效果。希望这会有所帮助!