变量值如何更改

时间:2019-07-15 21:04:21

标签: c

据我所知,当我们想在函数外部更改变量的值时,必须使用指针,如下所示: 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);
    }

}

2 个答案:

答案 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元素的指针的效果。希望这会有所帮助!