我有以下代码:
int* d = (int*) malloc(100 * sizeof(int));
cout<<"size of d which is pointer is: " << sizeof(d)<<endl;
Run Code Online (Sandbox Code Playgroud)
我知道sizeof输出4,因为d是ptr.但是,如何使用sizeof找到整个数组的大小
我运行以下代码,但它一直打印"4"
为什么它的打印"4"而不是"12"?我可以使用malloc然后使用sizeof吗?(如果可以,那么如何)
#include<stdio.h>
int main()
{
int arr1[3]={1,2,3};
int *arr2=arr1,i;
printf("%d",sizeof(arr2));
return 0;
}
Run Code Online (Sandbox Code Playgroud) typedef struct {
double *x;
int points;
} Polygon;
polygon[cc].points = readobject(polygon[cc].file); //lets say equals 15
polygon[cc].x = (double *) malloc(polygon[cc].points * sizeof(double));
printf("%d\n", sizeof(polygon[cc].x) / sizeof(polygon[cc].x[0]));
//This prints out on 1
Run Code Online (Sandbox Code Playgroud)
我测试初始化x为x[100],然后它工作,但不应该malloc()调用设置结构的数组x[15]?它只是测量两个doubles 的字节吗?
我正在尝试学习C++函数模板.我传递一个数组作为指向我的函数模板的指针.在那,我试图找到一个数组的大小.这是我使用的功能模板.
template<typename T>
T* average( T *arr)
{
T *ansPtr,ans,sum = 0.0;
size_t sz = sizeof(arr)/sizeof(arr[0]);
cout<<"\nSz is "<<sz<<endl;
for(int i = 0;i < sz; i++)
{
sum = sum + arr[i];
}
ans = (sum/sz);
ansPtr = &ans;
return ansPtr;
}
Run Code Online (Sandbox Code Playgroud)
即使我将指针传递给整数数组,该cout语句也会显示arras 的大小.现在我知道这可能是我之前提到的问题的可能重复,但我需要对此有更好的解释.15
我唯一能想到的是,因为模板是在运行时调用的,并且sizeof是一个编译时运算符,所以编译器只是忽略了这一行
int sz = sizeof(arr)/sizeof(arr[0]);
Run Code Online (Sandbox Code Playgroud)
因为在实际调用函数之前它不知道arr的确切类型.这是正确的还是我错过了这里的东西?将指针发送到函数模板也是可靠的吗?
我有一个从流反序列化的动态char数组.
char *myarray文件内容(使用hexal编辑器):
4F 4B 20 31 32 20 0D 0A 00 00 B4 7F
Run Code Online (Sandbox Code Playgroud)
strlen(myarray) 返回8,(必须是12)
struct BOOK
{
char name[120];
char author[120];
int year[50];
};
int main (void)
{
int i;
int number;
struct BOOK* books;
number = 50000;
printf("before \nsizeofbooks %d \n sizeofBOOK %d\n",
sizeof(books), sizeof(struct BOOK));
books = (struct BOOK*)malloc(sizeof(struct BOOK) * number);
printf("sizeofbooks %d \n sizeofBOOK %d\n",
sizeof(books), sizeof(struct BOOK));
free(books);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
before
sizeofbooks 4
sizeofBOOK 440
after
sizeofbooks 4
sizeofBOOK 440
Run Code Online (Sandbox Code Playgroud)
它总是输出4,即使我写入不同的数组,但我希望它会改变.我究竟做错了什么?
我的操作系统是winxp 32位,我使用的是代码块.
我制作了一个最小的工作示例,我有一大段代码.
问题是,sizeof打印第一次调用16,这是正确的大小,而第二次调用只打印8.奇怪的是,它总是打印8,独立于结构的大小,是否只有一个值或10个值.
struct test_struct
{
int32_t val1;
int32_t val2;
int32_t val3;
int32_t val4;
};
unsigned char * StructToChar(test_struct structy)
{
unsigned char returnval[sizeof(structy)];
memcpy(returnval, &structy, sizeof(structy));
return returnval;
}
int main()
{
test_struct sendstruct = {};
unsigned char *test_array = StructToChar(sendstruct);
unsigned char returnval[sizeof(sendstruct)];
memcpy(returnval, &sendstruct, sizeof(sendstruct));
printf("%d\n", sizeof(returnval));
printf("%d\n", sizeof(test_array));
return 0;
}
Run Code Online (Sandbox Code Playgroud) 通常要找到阵列的大小,我们做..
int A[]={1,2,67,9,0,-1,-90};
int n=sizeof(A)/sizeof(A[0]);
printf("the size of the array is %d\n", n);`
Run Code Online (Sandbox Code Playgroud)
上面代码的输出显示大小为7.但当A被放入某个指针然后,如果我们尝试做同样的,它显示
int A[]={1,2,67,9,0,-1,-90};
int *B=A;
int n=sizeof(B)/sizeof(B[0]);
printf("the size of the array is %d\n", n);
Run Code Online (Sandbox Code Playgroud)
答案是2
如何使用此指针找到数组的大小.
在阵列有四个元件,因此大小应4BIT*4 = 16(int数据类型采取在我的系统4位以存储该值.)但是,当我跑这个代码我只得到8位为的大小dynamicArray.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
//Dynamic arrays save memory by creating a pointer that stores
//the beginning of the array
int *dynamicArray = malloc(20 * sizeof(int));
*dynamicArray = 10;
printf("Address %x stores value %d\n", dynamicArray, *dynamicArray);
dynamicArray[1] = 20;
printf("dynamicArray[1] stores value %d\n", dynamicArray[1]);
dynamicArray[2] = 45;
printf("dynamicArray[2] stores value %d\n", dynamicArray[2]);
dynamicArray[3] = 34;
printf("dynamicArray[3] stores value %d\n", dynamicArray[3]);
printf("The size of dynamicArray is %d\n", sizeof(dynamicArray));
// Release unused memory:
free(dynamicArray);
return …Run Code Online (Sandbox Code Playgroud) 可能重复:
如何查找sizeof(指向数组的指针)
我正在使用以下代码创建一个数组
float *A;
A = (float *) malloc(100*sizeof(float));
float *B;
B = (float *) malloc(100*sizeof(float));
Run Code Online (Sandbox Code Playgroud)
但在这些之后,当我按下面的方式键入A和B的大小时,我得到2,因为我希望看到100.
sizeof(A)/sizeof(float)
Run Code Online (Sandbox Code Playgroud)