C语言中的指针问题
您好, 我正在尝试学习C语言中的指针,我只是想让我的“addtwo”函数向输入整数数组的每个元素添加2,但是我得到了奇怪的编译错误,这里是非指针版本,它确实无法正确编译C语言中的指针问题,c,pointers,C,Pointers,您好, 我正在尝试学习C语言中的指针,我只是想让我的“addtwo”函数向输入整数数组的每个元素添加2,但是我得到了奇怪的编译错误,这里是非指针版本,它确实无法正确编译 addtwo(int *arr[]) { int i=0; for(;i< sizeof(arr)/sizeof(int);i++) { arr[i] = arr[i] + 2; } } main() { int myarray[] = {1,2,3,4}; add
addtwo(int *arr[]) {
int i=0;
for(;i< sizeof(arr)/sizeof(int);i++) {
arr[i] = arr[i] + 2;
}
}
main() {
int myarray[] = {1,2,3,4};
addtwo(myarray);
}
addtwo(int*arr[]{
int i=0;
对于(;i
关于addtwo(int*arr[])
应该是addtwo(int*arr)
不能使用sizeof从指针获取数组的大小。通常,您可以将数组的大小作为一个单独的参数传递,或者使用一些特殊的值标记最后一个元素。与编译错误无关,但是 您必须将sizeof(arr)传递给函数,而不是在函数中调用它。当数组传递给函数时,C不再将其视为数组,而是将其视为指向内存的单个指针,因此现在调用它时,sizeof(arr)将返回指针arr的大小,很可能是4 以下是我在代码中的意思:
void addtwo(int *arr, int size){
int i=0;
for(;i< size;i++){
arr[i] = arr[i] + 2;
}
}
int main(){
int myarray[] = {1,2,3,4};
addtwo(myarray, sizeof(arr)/sizeof(int));
return 0;
}
void addtwo(int*arr,int size){
int i=0;
对于(;i
在C中,符号int*arr[]与int**arr相同。您需要传递一个指向数组第一个元素和数组大小的指针。数组类型衰减为函数参数上下文中的指针。尝试:
void addtwo(int *arr, size_t size){
for(size_t i = 0; i < size; i++){
arr[i] = arr[i] + 2;
}
}
int main() {
int v[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
addtwo(v, sizeof v / sizeof v[ 0 ]);
return 0;
}
void addtwo(int*arr,size\u t size){
对于(大小i=0;i
您遇到了一些问题。首先,尝试将int*
传递给类型为int**
的参数。那不行。给它类型int*
:
void addtwo(int *arr){
int i=0;
for(;i< sizeof(arr)/sizeof(int);i++){
arr[i] = arr[i] + 2;
}
}
void addtwo(int*arr){
int i=0;
对于(;i
然后,需要在另一个参数中传递大小。问题是,当传递数组时,实际上只传递一个指针(编译器将组成一个指向数组第一个元素的临时指针)。因此,您需要自己记录尺寸:
void addtwo(int *arr, int size){
int i=0;
for(;i<size;i++){
arr[i] = arr[i] + 2;
}
}
int main(void) {
int myarray[] = {1,2,3,4};
addtwo(myarray, sizeof myarray / sizeof myarray[0]);
}
void addtwo(int*arr,int size){
int i=0;
对于(;i虽然其他人已经给出了正确的响应,但基本上,当您有一个指针数组时
int *arr[]
我怀疑这是你想要的。如果你有
int arr[]
那么这也就相当于
int *arr
addtwo参数声明的内容如下:
arr是指向整数的指针数组
当你真的想要的时候
指向整数数组的指针
“”不久前,sizeof确实帮助我研究了这个主题,也许它也能为您提供同样的帮助。sizeof在addtwo的正文中不起作用。因此,这不是一个完整的答案。+1最初是正确的。编辑后,main在函数签名行中缺少一个返回。但实际返回0;可以删除。或者,将数组作为int[4]传递而不是int*。你不能在C中这样做:(最好的匹配是传递一个指向数组的指针。然后它看起来像void addtwo(int(*arr)[4])…addtwo(&myarray)。但是你不能传递任何其他大小,而且看起来相当可怕:)看看这个答案的细节:哦,你是对的,尽管你说“不能”这样做并不完全正确——您仍然可以将参数声明为int[4],但它与int[]或int*。事实上:)我的意思是说您不能将其作为int[4]传递。当然,没有什么可以阻止您将参数声明为int[4]:)