使用指向作为函数的参数传递的数组的指针

问题描述 投票:1回答:3

我是C语言的初学者,我正在尝试在函数中使用指针。

我正在尝试通过使用作为函数参数传递的指针来填充int的数组,但我不知道如何正确执行。

如何正确执行此操作?

功能

int validate_ip(char *ip, int *ptid) { /*function where I want to use it*/ }

Main

int main() {

    int ipv4[4];
    int *ptid = ipv4;

    //rest of my programm
} 
c arrays function pointers int
3个回答
0
投票

在C中,如果您声明一个数组(ipv4 [4]),则它为其元素保留内存,并且其指针为其名称(ipv4),其元素为ipv4 [0],ipv4 [1],ipv4 [2],ipv4 [3]。因此,如果要将数组传递给修改数组的函数(无效函数(int *数组)),则应仅使用指针,该指针应为function(ipv4);

但是在这种情况下,您不是将数组声明为数组,而是声明了一个指针,那么您没有足够的内存来存储这些指向poin的指针。有很多方法可以获取这些指针的内存,例如,函数malloc或calloc。在这里,您尝试将一个char *分配给一个int *,这不是最好的主意,因为当您执行ipv4 +时,ipv4 [2]等效于((ipv4 + 2),因为ipv4是char] 2 ipv4增长2 * sizeof(char)。因此,现在如果您以**(ptid + 2)的ptid增量增加2 * sizeof(int),则该字符可以或不能与chars相同。

希望对您有所帮助。


0
投票

如果尝试直接使指向数组的指针相等,可能会出现警告和问题。所以我对这个问题的解决方案是创建一个函数:

void equalize(int * pointer, int[] array , int size){
int i;
for(i=0;i<size;i++){
    pointer[i]=array[i];}
}


0
投票

将传递给函数中的指针参数是有效的:

int validate_ip(int *ip, size_t size) { //Pass the size of the array also
    for (size_t i = 0; i < size; i++){  
        printf("%d", ip[i]);            //using as if it was an array
    }

并在主要名称中进行更改,更改将是永久的:

int main() {

    int ipv4[4];

    int *ptid = ipv4;

    validate_ip(ptid, 4); //function call
} 

[您可以像使用原始数组一样使用它,请注意,如果数组的大小不是全局变量,还应该传递它,以通知函数函数数组的边界。

© www.soinside.com 2019 - 2024. All rights reserved.