C 语言指针,请问我这个代码到底为啥报错? Invalid type argument of unary '*' (have int)

2017-02-10 17:13:04 +08:00
 Newyorkcity

main.c

#include <stdio.h>
#include <stdlib.h>
#include "declaration.h"

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
	int *num = array_create(5);
	int number;
	int index = 0;
	
	do{
		scanf("%d",&number);
		*(array_at(num, index ++)) = number; //编译器认为这里错误, array_at 函数代码在下方
	} while(number != -1);
	
	printf("num = %s",num);
	array_free(num);
	return 0;
}

array.c

int *arrary_at(int num[], int index){
	// 用户输入要数组第几个单元,并且可以输出、修改这个值
	
	//如果给出单元已经越界,则应该扩展数组
	int n = sizeof(num)/sizeof(int)-1; 
	if (index >= n){
		num = arrary_inflate(num);
	}

	return &(num[index]); 
}

求解,谢谢!~
7365 次点击
所在节点    问与答
24 条回复
Newyorkcity
2017-02-10 23:51:07 +08:00
@wizardforcel 没仔细看就瞎问,看来是用 int **pnum 来表示访问两次得到的是一个整数型。。
msg7086
2017-02-11 04:00:59 +08:00
数组是指针常量,指针不是数组。
kevinzhwl
2017-02-11 10:29:37 +08:00
再补充一个,类型上数组可以退化成指针,但指针不能变成数组
aheadlead
2017-02-11 19:50:55 +08:00
@Newyorkcity (回复 15#)

我不是很懂你下面这行代码的意思:
int num[] = malloc(8);

我猜测你是想通过 malloc 从堆申请堆内存,
得到描述了一个 8 个 int 类型的元素的数组的空间的地址,
然后“赋值”给数组 num 。

实际上,这犯了语法错误,函数 malloc 返回的是指向 void 类型的指针。
而 int num[] = ...; 中
编译器期待 ... 应该是诸如 {233, 234, 235} 之类的东西。

此外, malloc(8) 分配的仅仅只是一块 8 个字节的内存。

这里你应该写成
int *num = (int *) malloc(8 * sizeof(int));

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/339607

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX