C语言问题,如何用指针指向未知长度的数组的末尾?

一个未知长度的数组,想用一个指针指到这个数组的末尾,应该怎样写代码?
最新回答
吹梦到西洲

2024-11-27 04:21:17

楼主,可以用指针解决,即让指针开始指向数组首地址,然后P++,直到遇到\0为止。
例子:
int a[20]={1,2,3,4}
int *p=a /*p指向数组a首地址*/
while(*p) /*这要有值,就为真,p不断往后指*/
++p;
--p; /*注意,p最后还会下移一位,指到了\0,向前一位就指到了末尾的值的了*/

不知道楼主满意否啊? 注意:用指针效率高。
し①泩呮嗳︶ㄣ

2024-11-27 05:17:37

用 k = sizeof( a ) / sizeof( int )( 或者long型 ), 先测出数组的元素个数 ,然后 p = a + k -1 就可以了 ,指向最后一个元素
竹栀待清归

2024-11-27 06:01:45

希望问题再具体一些。对于很多情形,是无法保证能定位到数组末尾的。
但对于
字符串
指针,只要确保字符串末尾有'/0'终止符,则是很容易定位的:
假设
char ch[]="abcdefg";
char *p=ch;
则只需要:
if ( *p != '0')
{
while( *(++p) != '0'){};
}
初心不负

2024-11-27 06:16:07

//---------------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>

char *getline(FILE *fp) /*从文件读取一行内容,以字符形式保存*/
{
char c,*cl=NULL;
int n=0;
while ((c=fgetc(fp))!='\n'&&c!=EOF)
{
cl=cl?realloc(cl,sizeof(char)*(n+++1)):malloc(sizeof(char)*++n);
cl[n-1]=c;
}
if (cl) {
cl=realloc(cl,sizeof(char)*++n);
cl[n-1]=0;
}

return cl;
}

int *split(char *line) /*从字符数组line中提取出整数,保存到整型数组中并返回*/
{
int *rt=malloc(sizeof(int));
int i,l,num;
rt[0]=0;
for (i = 0; *line; i++) {
rt=realloc(rt,sizeof(int)*(++rt[0]+1));
sscanf(line,"%1d",&num);
rt[rt[0]]=num;
line+=(int)floor(log10(num))+1;
while (isspace(*line))
++line;
}
return rt;
}

int main(void)
{
FILE *fp=fopen("c:\\d.txt","r");
char *cl=NULL;
int **ma=NULL; /*二维数组指针,指向从文件读取的矩阵*/
int i,j,n=0; /*n是矩阵的行数*/
while ((cl=getline(fp))!=NULL)/*这个过程用于从文件读取矩阵并保存到动态分配的二维数组中*/
{
ma=ma?realloc(ma,sizeof(int *)*(n+++1)):malloc(sizeof(int *)*++n);
ma[n-1]=split(cl);

}
fclose(fp);

for (i = 0; i<n; i++) { /*输出矩阵*/
for (j=1; j<=ma[i][0]; j++) { /*ma[i][0]保存了该行的整数个数*/
printf("%d\t",ma[i][j]);
}
putchar('\n');
}
return 0;
}
//---------------------------------------------------------------------------
另外,站长团上有产品团购,便宜有保证
是我,辜负了爱』

2024-11-27 07:31:40

很遗憾,无法做到,除非事先使用了特殊的数字来对结尾进行标记,或者记录了数组的长度。