我正在运行一个简单的程序,以使用双指针打印数组的第一个元素值:
#include <stdio.h>
int main()
{
int arr[3] = {1,2,3};
int **ptr;
*ptr = arr;
printf("%d\n", **ptr);
return 0;
}
但是然后我得到了一个细分错误。我究竟做错了什么?
指针ptr
未初始化,并且具有不确定的值。
int **ptr;
因此,取消引用它会导致未定义的行为。
*ptr = arr;
您需要一个中间指针。例如
int *p;
int **ptr = &p;
*ptr = arr;
或者您可以像这样动态分配中间指针
int **ptr = malloc( sizeof( int * ) );
*ptr = arr;
//...
free( ptr );
这是两个演示程序。
#include <stdio.h>
int main( void )
{
int arr[3] = {1,2,3};
int *p;
int **ptr = &p;
*ptr = arr;
printf("%d\n", **ptr);
return 0;
}
和
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
int arr[3] = {1,2,3};
int **ptr = malloc( sizeof( int * ) );
*ptr = arr;
printf("%d\n", **ptr);
free( ptr );
return 0;
}
这两个程序都有输出
1
如果需要指向整个数组的指针,则其声明可以看起来像下面的演示程序中所示。
#include <stdio.h>
int main( void )
{
enum { N = 3 };
int arr[N] = { 1, 2, 3 };
int ( *ptr )[N] = &arr;
for ( size_t i = 0; i < N; i++ )
{
printf( "%d ", ( *ptr )[i] );
}
putchar( '\n' );
return 0;
}
程序输出为
1 2 3
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句