只有数组首地址,打印所有元素,该如何解决

只有数组首地址,打印所有元素
比如 int a[]
只有a的地址,能不能打印所有a 的元素
能不能实现?

------解决方案--------------------
void print()
{
int a[] ={1,2,3,4};
for(int i=0;i<sizeof(a)/sizeof(int);i++)
printf("%d",a[i]);
 
}

------解决方案--------------------
探讨

对,如果,不知道数组元素类型的话,就不太好搞了。。。

------解决方案--------------------
探讨

对,如果,不知道数组元素类型的话,就不太好搞了。。。

------解决方案--------------------
探讨

void print()
{
int a[] ={1,2,3,4};
for(int i=0;i<sizeof(a)/sizeof(int);i++)
printf("%d",a[i]);
 
}

------解决方案--------------------
只知道数组地址----意味着不知道元素个数(参数传递只传地址),不知道元素类型(void*传递)----无法打印:循环无法控制+输出格式无法控制。
1楼的例子(在定义域内的数组,及扩展的“动态数组”)不存在上面两个“不知道”
------解决方案--------------------
探讨
引用:
void print()
{
int a[] ={1,2,3,4};
for(int i=0;i<sizeof(a)/sizeof(int);i++)
printf("%d",a[i]);
 
}

偶,对呀,这个没想到啊

------解决方案--------------------
呃···我感觉我在写代码的时候sizeof(a) / aizeof(int)还是蛮常用的,因为有时候初始化一个字符数组,懒得数长度,而且这样写的话可移植性应该更好吧···可能不同的计算计中int所占的字节数不同呢
------解决方案--------------------
我认为是这样的:

C/C++ code

#include <stdio.h>

void print(int a[])
{
    for(int i = 0; i < sizeof(a)/sizeof(a[0]); ++i)
    {
        printf("a[%d] = %d. \n", i, a[i]);
    }
}

void printNew(int a[], int len)
{
    for(int i = 0; i < len; ++i)
    {
        printf("a[%d] = %d. \n", i, a[i]);
    }
}

int main()
{
    int ia[] = {1, 2, 3, 4};

    // 在这可以通过 sizeof(ia)/sizeof(ia[0]) 算出ia的长度
    for(int i = 0; i < sizeof(ia)/sizeof(ia[0]); ++i)
    {
        printf("a[%d] = %d. \n", i, ia[i]);
    }

    printf("\n");

    // 当int a[]作为参数时,数组型参数弱化为指针,和int *a是一样的。
    // 所以print函数中的 sizeof(ia)/sizeof(ia[0]) 无法正确计算出数组的实际长度
    print(ia);

    printf("\n");

    // 所以用int a[]作为数组型参数传递的时候,最好加上一个len参数
    printNew(ia, sizeof(ia)/sizeof(ia[0]));

    return 0;
}