C 如何在通过指向数组的指针进行访问时知道数组的元素数
这是我的代码:C 如何在通过指向数组的指针进行访问时知道数组的元素数,c,arrays,loops,pointers,struct,C,Arrays,Loops,Pointers,Struct,这是我的代码: #include <stdio.h> typedef struct{ int n; char l; } dat; void printa(dat* x){ while(*x != NULL){ printf("%c %d\n",x->l,x->n); x++; } } int main(int argc,char* argv[]){ dat new[10]={ {4,'d'}, {7,'g'}, {3,'c'}, {6,'f'}, {2,'b'},
#include <stdio.h>
typedef struct{
int n;
char l;
} dat;
void printa(dat* x){
while(*x != NULL){
printf("%c %d\n",x->l,x->n);
x++;
}
}
int main(int argc,char* argv[]){
dat new[10]={
{4,'d'},
{7,'g'},
{3,'c'},
{6,'f'},
{2,'b'},
{5,'e'},
{1,'a'}
};
dat* x=new;
printa(x);
return 0;
}
但是我宁愿让struct数组完全执行(打印所有元素),而不是在固定的数目上停止。不,您想要的东西无法直接实现。使用指针指向数组后,指针不会继承数组大小附近的任何信息。因此,不能将指针传递给函数,而期望通过该指针计算数组的有效长度 您必须遵循以下任一方法
如果指针以有效地址开头,然后递增,则指针永远不会为空 您需要修改数据,以便循环知道何时停止
{0,0}
如果零是数据中的一个有效值,那么您当然需要调整它。您还需要添加
{0,0}
,否则您只是依赖于表末尾的内存为零。这并非不可能,但也无法保证。瞧,你在依赖“未定义的行为”。
void printa(dat* x){
int num=0;
while(num++ < 2){
printf("%c %d\n",x->l,x->n);
x++;
}
}