我是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中,如果您声明一个数组(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相同。
希望对您有所帮助。
如果尝试直接使指向数组的指针相等,可能会出现警告和问题。所以我对这个问题的解决方案是创建一个函数:
void equalize(int * pointer, int[] array , int size){
int i;
for(i=0;i<size;i++){
pointer[i]=array[i];}
}
将传递给函数中的指针参数是有效的:
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
}
[您可以像使用原始数组一样使用它,请注意,如果数组的大小不是全局变量,还应该传递它,以通知函数函数数组的边界。