【发布时间】:2015-04-30 15:07:00
【问题描述】:
Consider the following functions
void alloco(int **ppa)
{
int i;
printf("inside alloco %d\n",ppa); /*this function allocates and fills 20 * sizeof(int) bytes */
*ppa = (int *)malloc(20 * sizeof(int));
/*fill all 20 * sizeof(int) bytes */
}
int main()
{
int *app = NULL;
int i;
printf("inside main\n");
alloco(&app);
for(i=0;i<20;i++) /*ISSUE::how will i know to traverse only 20 indexes?*/
printf("app[%d] = %d \n", i, app[i]);
return(0);
}
基本上 main() 将如何知道要遍历的字节数,即 alloco() 函数分配的内存。字符数组中是否有像 NULL 这样的分隔符?
【问题讨论】:
-
如果你真的需要在不传递大小的情况下执行此操作,那么你需要自己填充分隔符,或者需要依赖 malloc 的平台特定实现来访问标题。
-
C-"strings" (
chararrays) 由NULakanullaka'\0'终止,但肯定不是由NULL终止,后者是不同的。跨度> -
如果这种模式经常出现,您可能需要一个结构来跟踪其第二个成员(指针)所指向的数据长度。或者您使用在其标准库中具有该结构的语言;-)
标签: c pointers pointer-to-pointer pass-by-pointer