只有数组首地址,打印所有元素,该如何解决
只有数组首地址,打印所有元素
比如 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*传递)----无法打印:循环无法控制+输出格式无法控制。
1楼的例子(在定义域内的数组,及扩展的“动态数组”)不存在上面两个“不知道”
------解决方案--------------------
------解决方案--------------------
呃···我感觉我在写代码的时候sizeof(a) / aizeof(int)还是蛮常用的,因为有时候初始化一个字符数组,懒得数长度,而且这样写的话可移植性应该更好吧···可能不同的计算计中int所占的字节数不同呢
------解决方案--------------------
我认为是这样的:
比如 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*传递)----无法打印:循环无法控制+输出格式无法控制。
1楼的例子(在定义域内的数组,及扩展的“动态数组”)不存在上面两个“不知道”
------解决方案--------------------
------解决方案--------------------
呃···我感觉我在写代码的时候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; }