printf-代码如下 请问我函数里的打印长度为什么为0和main中的长度为10不一样

问题描述

代码如下 请问我函数里的打印长度为什么为0和main中的长度为10不一样

#include
#include
#include
#include
#define GET_ARRAY_LEN(array) (sizeof(array)/sizeof(array[0]))
int ARRAY_ABS(double array[])
{
printf("n%d",GET_ARRAY_LEN(array));

return 0;
}
int main()
{
double a[10] ={1,2,3,4,5,6,7,8,9,10};
printf("%d,",GET_ARRAY_LEN(a));
ARRAY_ABS(a);
return;
}

解决方案

作为函数参数的数组名是个指针,sizeof 得到的是指针的长度,要想在函数内使用数组长度,只能另传入一个参数,或者像字符串那样特殊约定以‘’结尾。不过可以这样使用:

 #include<stdio.h>

#define  LENGTH(x) (sizeof(x) / sizeof(*(x+0)) )

int arr_length(int *arr, size_t len)
{
    int i;
    printf("Length of the array is %unvalue is: ", len);
    for(i = 0; i < len; ++i)
    {
        printf("%d  ", arr[i]);
    }
}

int main(void)
{
    int a[] = {12, 22, 32, 42, 52, 62};
    size_t len = 0;

    arr_length(a, LENGTH(a) );

    return 0;
}

解决方案二:

在ARRAY_ABS里array只是一个指针,所以sizeof(array)的值是4。

解决方案三:

ARRAY_ABS里的array是指针类型,打印的是指针而不是数组~

解决方案四:

C++里的数组指针没有任何办法获取长度。

否则为什么字符串最后需要一个存储空间存''作为结尾,为什么strlen函数需要遍历数组去找这个字符?

这也是C/C++愚蠢的地方。

时间: 2024-11-16 02:03:40

printf-代码如下 请问我函数里的打印长度为什么为0和main中的长度为10不一样的相关文章

c c++-数据结构中用C++怎么把两个链表合成一个链表,一下是一对代码,请问主函数怎么写

问题描述 数据结构中用C++怎么把两个链表合成一个链表,一下是一对代码,请问主函数怎么写 求代码!#include template struct Node { DataType data; Node*next; }; template class Linklist { public: Linklist(DataType a[],int n); ~Linklist(); int Length(); DataType Get(int i); int Locate(DataType x); void

opengl-文件操作,我将文件操作部分的代码放在,myDisplay函数内部就没有问题了。。这是为什么

问题描述 文件操作,我将文件操作部分的代码放在,myDisplay函数内部就没有问题了..这是为什么 F:WORKopengl test tempdashBoard.cpp(8) : error C2501: 'fp' : missing storage-class or type specifiers F:WORKopengl test tempdashBoard.cpp(8) : error C2040: 'fp' : 'int' differs in levels of indirecti

链表-请教:(C语言学生信息管理)程序函数里好像直接跳过了某一段代码执行

问题描述 请教:(C语言学生信息管理)程序函数里好像直接跳过了某一段代码执行 void Student_Searchself(STUDENT *head) //此函数是为了显示学生的各科成绩和各科排名 //(head)存储学生成绩的链表头指针{STUDENT *p*m*e*y*l;STUDENT *p1*p2*p3*p4;char s[6];system(""cls"");printf(""请输入本人学号来查找n"");sca

新手请问,Matlab里有关于卷积神经网络的BP算法可直接调用的函数或文件吗?麻烦大神求告知

问题描述 新手请问,Matlab里有关于卷积神经网络的BP算法可直接调用的函数或文件吗?麻烦大神求告知 对Matlab不熟,在学习卷积神经网络BP算法,想请问Matlab里有没有可调用的文件或函数直接拿来用的 解决方案 内置有这个函数的,具体实现的话我不是很了解.

android-安卓开发可以在主函数里通过代码更改布局文件控件的图标吗

问题描述 安卓开发可以在主函数里通过代码更改布局文件控件的图标吗 不知道行不行 在线等 解决方案 控件的图标?什么控件 解决方案二: 理论上是可以的,实践上应该也是可以的 解决方案三: 完全可以啊 .得看你是什么控件了.怎么控制看API .

java-要做咖啡机界面,我的代码怎么实现在主函数里接收右面板

问题描述 要做咖啡机界面,我的代码怎么实现在主函数里接收右面板 这是右面板: public class RightPanel extends JPanel{ JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); static JPanel p3 = new JPanel(); JButton b1,b2,b3,b4,b5,b6,b7; static JPanel rp=null; private RightPanel(){ this.setLay

函数指针 c语言 指针-C语言 在函数里给结构体赋值

问题描述 C语言 在函数里给结构体赋值 求懂的人解释一下,谢谢 代码意思是想在传结构体指针给函数,在函数里面改变结构体各项的值,运行结果为:a和b的值能改变,但到打印指针c的时候,程序报错 #include struct stu { int a; int b; char *c; }; //给结构体s1初始化 void Fun(void *ptr) { char *s = (char *)malloc(10); s = "Hello World"; int *p = (int *)ptr

j uery代码-请教一段jQuery代码,请问是表示什么意思?

问题描述 请教一段jQuery代码,请问是表示什么意思? 大家好,请问代码里面的"t = c(e) ""u(v m g y t[r + 0] b 3614090360) ",是表示什么意思呢?希望能给解答,谢谢. e.extend( { Token: function(e) { var t = Array(); e += cb; var r i s o d v m g y b = 7 w = 12 E = 17 S = 22 x = 5 T = 9 N = 14 C

c++-请教一个MFC函数里鼠标画线的问题

问题描述 请教一个MFC函数里鼠标画线的问题 void C3Dlg::OnMouseMove(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if (nFlags == MK_LBUTTON) { dc->MoveTo(pt); dc->LineTo(point.x , point.y ); } pt = point; CDialogEx::OnMouseMove(nFlags, point); } 请问下这个程序如果把 P