C 但是sizeof()操作符没有';不适用于指针,但适用于数组名称。为什么会这样?
您好,我正在做这个练习,希望在将指向数组的指针传递给函数后获得数组的大小: 但是sizeof()运算符对指针不起作用,但对数组名起作用。为什么会这样? 这是我在findPut函数上获取数组大小的任何方法吗C 但是sizeof()操作符没有';不适用于指针,但适用于数组名称。为什么会这样?,c,pointers,C,Pointers,您好,我正在做这个练习,希望在将指向数组的指针传递给函数后获得数组的大小: 但是sizeof()运算符对指针不起作用,但对数组名起作用。为什么会这样? 这是我在findPut函数上获取数组大小的任何方法吗 #include <stdio.h> //global vars int i,j; //functions prototypes void findPut(int *, int); int main(void){ int ins=4; int arr[10]={
#include <stdio.h>
//global vars
int i,j;
//functions prototypes
void findPut(int *, int);
int main(void){
int ins=4;
int arr[10]={1,2,3,5,6,7,8};
printf("%d\n",sizeof(arr)); //gives 40
int *ap=arr;
printf("%d\n",sizeof(*ap)); //gives 4 instead of 40 why?? if ap and arr the same thing
findPut(ap, ins);
return 0;
}
//functions
void findPut(int *p, int n){
//vars
//getting size of array
int size= sizeof(*p);
//sizeof(int);
printf("%d\n",size); //gives 4 but expected 40????
}
#包括
//全局变量
int i,j;
//功能原型
无效findPut(int*,int);
内部主(空){
int-ins=4;
int-arr[10]={1,2,3,5,6,7,8};
printf(“%d\n”,sizeof(arr));//给出40
int*ap=arr;
printf(“%d\n”,sizeof(*ap));//如果ap和arr是同一事物,则给出4而不是40为什么
findPut(ap、ins);
返回0;
}
//功能
无效findPut(int*p,int n){
//瓦尔斯
//获取数组的大小
int size=sizeof(*p);
//sizeof(int);
printf(“%d\n”,size);//给出4,但预期为40????
}
当你取消引用*p
时,你得到一个int
,因此它返回4(这是你平台上int
的大小)。当你取消引用*p
时,你得到一个int
,因此它返回4(这是你平台上int
的大小)。因为,sizeof(*ap)
表示sizeof(arr[0])
由于数组的类型为int
,sizeof(int)
,因为在系统配置中,int
的大小为4
,所以得到的结果为4
您可以通过打印*p
的值自己尝试,您将获得arr[0]
的值
让int*p
作为指针,并int arr[10]
请注意:
数组
和指针不等价sizeof
运算符是编译时运算符李>
sizeof(arr)
,计算结果为10*sizeof(int)
,即在您的情况下10*4=40
int
,因此,*p
表示arr[0]
sizeof(arr[0])
is
(对你来说)这是显而易见的sizeof(p)
时,它将为您提供计算机中指针的大小。
在我的机器里是8main
函数的返回类型应始终为int
。它必须重新向操作系统报告程序的退出状态。如果使用void
它可能会返回随机垃圾#include<stdio.h>
#include<stdlib.h>
int main(){
int *p=NULL;
int arr[10]={10,1,2,3,5,6,7,8,9,10};
p=arr;
printf("values: arr[0]=%d *p= %d\n\n",arr[0],*p);
printf("sizes : sizeof(arr[0])=%lu, sizeof(*p)= %lu sizeof(int)=%lu\n\n",sizeof(arr[0]),sizeof(*p),sizeof(int));
printf("Sizeof pointer p: %lu \n\n",sizeof(p));
printf("Sizeof arr: %lu \n\n",sizeof(arr));
printf("Pointing p to the first byte of 100 byte sequence\n\n");
p=malloc(100);
printf("Though p is pointing 100 byte block, sizeof(p)=%lu",sizeof(p));
return 0;
}
因为,sizeof(*ap)
表示sizeof(arr[0])
由于数组的类型为int
,sizeof(int)
,因为在系统配置中,int
的大小为4
,所以得到的结果为4
您可以通过打印*p
的值自己尝试,您将获得arr[0]
的值
让int*p
作为指针,并int arr[10]
请注意:
数组
和指针不等价sizeof
运算符是编译时运算符李>
sizeof(arr)
,计算结果为10*sizeof(int)
,即在您的情况下10*4=40
int
,因此,*p
表示arr[0]
sizeof(arr[0])
is
(对你来说)这是显而易见的sizeof(p)
时,它将为您提供计算机中指针的大小。
在我的机器里是8main
函数的返回类型应始终为int
。它必须重新向操作系统报告程序的退出状态。如果使用void
它可能会返回随机垃圾#include<stdio.h>
#include<stdlib.h>
int main(){
int *p=NULL;
int arr[10]={10,1,2,3,5,6,7,8,9,10};
p=arr;
printf("values: arr[0]=%d *p= %d\n\n",arr[0],*p);
printf("sizes : sizeof(arr[0])=%lu, sizeof(*p)= %lu sizeof(int)=%lu\n\n",sizeof(arr[0]),sizeof(*p),sizeof(int));
printf("Sizeof pointer p: %lu \n\n",sizeof(p));
printf("Sizeof arr: %lu \n\n",sizeof(arr));
printf("Pointing p to the first byte of 100 byte sequence\n\n");
p=malloc(100);
printf("Though p is pointing 100 byte block, sizeof(p)=%lu",sizeof(p));
return 0;
}
您有一个
int
数组和一个int
指针:
int arr[10] = {1,2,3,5,6,7,8};
int* ap;
ap = arr;
在C语言中,表达式arr
相当于&arr[0]
。因此,显然,*ap
相当于arr[0]
,它是一个int
,对于二进制文件来说,它的大小是4
您还需要了解,数组和指针不是一回事。您可能已经被数组和指针经常互换使用的事实弄糊涂了,因为指针可以存储数组开头的地址(换句话说,它的第一个元素)并导航连续地址,就好像它已将实际数组传递给它一样。您有一个
int
数组和一个int
指针:
int arr[10] = {1,2,3,5,6,7,8};
int* ap;
ap = arr;
在C语言中,表达式arr
相当于&arr[0]
。因此,显然,*ap
相当于arr[0]
,它是一个int
,对于二进制文件来说,它的大小是4
您还需要了解,数组和指针不是一回事。数组和指针经常互换使用,这可能会让您感到困惑,因为指针可以存储数组开头的地址(换句话说,它的第一个元素)并在连续地址中导航,就好像它已将实际数组传递给它一样。因为数组和指针不一样!你认为苹果和橙子味道一样吗?因为数组和指针不一样!你认为苹果和橙子味道一样吗?
sizeof(int)
并不总是4。这个答案需要澄清,否则会引起混淆p
是指向整数的指针,*p
是整数,sizeof*p
是整数的大小,在OPs平台上