C 使用指针显示数组的内容
我被困在如何使用指针来显示数组的问题上。我可以很容易地通过使用for循环的数组来实现这一点,但我很想知道如何通过指针来使用,并且我被困在了如何计算数组的起点和终点的问题上 下面是示例程序C 使用指针显示数组的内容,c,pointers,C,Pointers,我被困在如何使用指针来显示数组的问题上。我可以很容易地通过使用for循环的数组来实现这一点,但我很想知道如何通过指针来使用,并且我被困在了如何计算数组的起点和终点的问题上 下面是示例程序 void printArray(int *ptr); { //for statement to print values using array for( ptr!=NULL; ptr++) // i know this do
void printArray(int *ptr);
{
//for statement to print values using array
for( ptr!=NULL; ptr++) // i know this doesn't work
printf("%d", *ptr);
}
int main()
{
int array[6] = {2,4,6,8,10};
printArray(array);
return 0;
}
您有几个选择:
- 您可以将数组的大小传递给函数
- 您可以将一个特殊的“sentinel”值(例如
)作为数组的最后一个元素;如果执行此操作,则必须确保此值不能作为数组的一部分显示-1
printary
)中处理数组,需要知道数组长度的方法。这可以通过两种方式实现:
- 用于最后一个元素的特殊终止标记。对于字符串,这是
。在您的示例中,如果实际数据中永远不会出现该值,则它可能是NULL
-1
- 将长度参数传递给
printary
:
//Marker value.
for(;*ptr != -1; ++ptr)
printf("%d", *ptr);
//Length parameter
for(int i = 0; i < length; ++i)
printf("%d", *(ptr+i));
//标记值。
对于(;*ptr!=-1;++ptr)
printf(“%d”,*ptr);
//长度参数
对于(int i=0;i
函数需要知道数组的大小。有两种常见的方法:
将实际大小传递给函数,例如
void printArray(int *ptr, size_t size)
{
int *const end = ptr + size;
while( ptr < end ) {
printf("%d", *ptr++);
}
}
int main()
{
int array[6] = {2,4,6,8,10};
printArray(array, sizeof(array) / sizeof(array[0]) );
return 0;
}
检查NULL技巧仅适用于以NULL结尾的字符串。对于数字数组,也必须传入大小
void printArray(int *ptr, size_t length);
{
//for statement to print values using array
size_t i = 0;
for( ; i < length; ++i )
printf("%d", ptr[i]);
}
void printString(const char *ptr);
{
//for statement to print values using array
for( ; *ptr!='\0'; ++ptr)
printf("%c", *ptr);
}
int main()
{
int array[6] = {2,4,6,8,10};
const char* str = "Hello World!";
printArray(array, 6);
printString(str);
return 0;
}
void打印数组(int*ptr,大小\u t长度);
{
//for语句使用数组打印值
尺寸i=0;
对于(;i
这是答案(未经测试)
void打印数组(int-arr[]);
{
int*ptr;
对于(ptr=&arr[0];ptr类似于void(int*ptr,int size){for int i=0;我只是出于好奇,指针是否有任何方法可以确定for循环中数组的大小,可能是使用指向指针的指针等。这只是我的问题guess@samprat:是的,类似这样(但别忘了也增加i
)@axis,是的,我几乎忘了增加i..thanks*(ptr+i)
相当于ptr[i]
因此,它失去了使用指针进行迭代的意义。for循环中的前缀或后缀是否会有任何区别。在这种情况下,预增量和后增量不应该有任何区别。我习惯于编写前者,因为后一种方法涉及到创建被增量对象的临时副本。这在ca中可能非常重要SE和C++类定义了<代码>运算符++<代码>。但是在这两种情况下,它应该是相同的。上次我做C是几个月前。如果我有一个动态分配的整数数组,我必须把我传递的大小存储到<代码> MalOC ,以便使它通过循环而不游过那个块的边缘。内存,对吗?@Ungeheuer是的,如果你只有malloc
返回的指针,就没有(可移植的)方法来检索分配的数组的大小@Every,谢谢你们帮我澄清了疑问。你的示例解决方案不仅解决了我的主要问题,还帮我澄清了一些疑问。谢谢
void printArray(int *ptr, size_t length);
{
//for statement to print values using array
size_t i = 0;
for( ; i < length; ++i )
printf("%d", ptr[i]);
}
void printString(const char *ptr);
{
//for statement to print values using array
for( ; *ptr!='\0'; ++ptr)
printf("%c", *ptr);
}
int main()
{
int array[6] = {2,4,6,8,10};
const char* str = "Hello World!";
printArray(array, 6);
printString(str);
return 0;
}
void printArray(int arr[]);
{
int *ptr;
for(ptr = &arr[0]; ptr <= &arr[5]; ptr++)
{
if(ptr != null)
printf("%d", *ptr);
ptr++; // incrementing pointer twice, as there are ‘int' values in array which
//are of size 2 bytes, so we need to increment it twice..
}
}
int main()
{
int array[6] = {2,4,6,8,10};
printArray(array);
return 0;
}