C 如何增加指针值数组的索引?
初学者问题。我对指针有点了解,但在函数中使用指针打印数组值时遇到了很多麻烦。 特别是在这一行:printf(“\n%d\t\t%d\t0x%X”,i+1,*(arr+i),arr);我的输出是一个表,显示输入计数、用户输入的值以及存储的地址。地址看起来不错,但值打印为垃圾。当试图用索引I递增指针数组时,我认为语法*(arr+I)是正确的C 如何增加指针值数组的索引?,c,arrays,pointers,C,Arrays,Pointers,初学者问题。我对指针有点了解,但在函数中使用指针打印数组值时遇到了很多麻烦。 特别是在这一行:printf(“\n%d\t\t%d\t0x%X”,i+1,*(arr+i),arr);我的输出是一个表,显示输入计数、用户输入的值以及存储的地址。地址看起来不错,但值打印为垃圾。当试图用索引I递增指针数组时,我认为语法*(arr+I)是正确的 #include<stdio.h> #include <stdlib.h> void function(int *arr[]); m
#include<stdio.h>
#include <stdlib.h>
void function(int *arr[]);
main()
{
int array[5];
function(&array);
}
void function(int *arr[])
{
int i, n;
printf("How many elements? ");
scanf("%d", &n);
for(i=0; i<n; i++)
{
printf("Enter element %d: ", i);
scanf("%d", arr);
arr++;
}
printf("\nInput\t\tValue\tAddress");
for(i=0; i<n; i++)
{
printf("\n%d\t\t%d\t0x%X", i+1, *(arr+i) , arr);
arr++;
}
}
#包括
#包括
空洞函数(int*arr[]);
main()
{
int数组[5];
函数(&数组);
}
无效函数(int*arr[])
{
inti,n;
printf(“有多少元素?”);
scanf(“%d”和“&n”);
for(i=0;iint*arr[]
是指针数组
在向这些指针写入内容之前,您需要为它们分配内存
arr[0] = malloc(sizeof(int));
因此,您的代码应该如下所示:
a[0] = malloc(sizeof(int) *n);
for(i=0;i<n;i++)
{
scanf("%d",(a+i));
printf("%d\n",*(a+i));
}
那就做吧
for(i=0; i<n; i++)
{
printf("Enter element %d: ", i);
scanf("%d", &arr[i]);
}
对于(i=0;i请尝试以下操作
#include<stdio.h>
#define N 5
void function( int arr[] );
int main( void )
{
int array[N];
function( array );
}
void function( int arr[] )
{
int i, n;
int *p = arr;
printf( "How many elements? " );
scanf( "%d", &n );
if ( N < n ) n = N;
for ( i = 0; i < n; i++ )
{
printf( "Enter element %d: ", i );
scanf( "%d", p++ );
}
printf( "\nInput\t\tValue\tAddress" );
for ( i = 0; i < n; i++ )
{
printf( "\n%d\t\t%d\t%p", i+1, *( arr + i ) , arr + i );
}
}
#包括
#定义n5
空洞函数(int-arr[]);
内部主(空)
{
整数数组[N];
函数(数组);
}
无效函数(int-arr[])
{
inti,n;
int*p=arr;
printf(“有多少元素?”);
scanf(“%d”和“&n”);
如果(N
希望这有帮助
#include<stdio.h>
#include <stdlib.h>
#define N 5
void function(int *);
int main()
{
int array[N];
function(&array);
return 0;
}
void function(int *arr)
{
int i, n;
printf("How many elements? ");
scanf("%d", &n);
fflush(stdin);
if (n<=N) {
for(i=0; i<n; i++)
{
printf("Enter element %d: ", i);
scanf("%d", arr);
fflush(stdin);
arr++;
}
printf("\nInput\t\tValue\tAddress");
for(i=0; i<n; i++)
{
printf("\n%d\t\t%d\t0x%X", i+1, *(arr+i) , arr);
arr++;
}
}
#包括
#包括
#定义n5
空洞函数(int*);
int main()
{
整数数组[N];
函数(&数组);
返回0;
}
无效函数(int*arr)
{
inti,n;
printf(“有多少元素?”);
scanf(“%d”和“&n”);
fflush(stdin);
如果(n几乎没有问题:
1.void函数(int*arr[]);
=>
在此函数中,您声明的是指针数组,而不是指向数组的指针。请阅读有关int(*)arr[]
和int*arr[]
,使它们不同的是“()”和“[]”的优先顺序
2.如果你定义了一个数组,比如int-arr[5];
那么要传递数组的基址,你必须像function(arr)
那样传递它,所以如果你调用函数,比如function(&arr)
,那么它就没有任何意义了。当你声明一个数组int-arr[5]
(比如说)然后,arr
始终表示该数组的基址。
==>>接下来要使用指针数组(您正在使用的指针数组),您需要了解动态内存分配函数,如malloc()、calloc()、realloc()和free()。
所以我给你们的建议是首先从一本完全是指针书的书中读到指针。我最喜欢的是Kenneth a.Reek的“C上的指针”
不要依赖网站学习基础知识,买一本好书。使用StackOverflow作为解决严重问题的资源。int*arr[]
相当于int**arr
,一个指向(数组)的指针指针。编译器应该在调用时生成一个警告,因为&array
的类型是int*
。您能为我解释一下malloc的用法吗?我在for循环之前输入了这一行,它给了我错误“预期int**,但参数的类型是int(*)[5]”@steeele你真的有很多指针吗?你能不能只使用一个指针,如图所示?是的,这是我课堂练习的一部分。不仅如此,我真的很好奇我做错了什么,这让我很困惑。
#include<stdio.h>
#include <stdlib.h>
#define N 5
void function(int *);
int main()
{
int array[N];
function(&array);
return 0;
}
void function(int *arr)
{
int i, n;
printf("How many elements? ");
scanf("%d", &n);
fflush(stdin);
if (n<=N) {
for(i=0; i<n; i++)
{
printf("Enter element %d: ", i);
scanf("%d", arr);
fflush(stdin);
arr++;
}
printf("\nInput\t\tValue\tAddress");
for(i=0; i<n; i++)
{
printf("\n%d\t\t%d\t0x%X", i+1, *(arr+i) , arr);
arr++;
}
}