c语言编程 int *a和int a [ ]有区别吗?
void fun(int a[], int n)
{int i,t;
/**********found**********/
for (i=0; i<___1___; i++)
{
t=a[i];
/**********found**********/
a[i] = a[n-1-___2___];
/**********found**********/
___3___ = t;
}
}
main()
{int b[9]={1,2,3,4,5,6,7,8,9}, i;
printf("\nThe original data :\n");
for (i=0; i<9; i++)
printf("%4d ", b[i]);
printf("\n");
fun(b, 9);
printf("\nThe data after invert :\n");
for (i=0; i<9; i++)
printf("%4d ", b[i]);
printf("\n");
}
这题用了int a[ ],有错吗? 展开
int *a是定义一个整型指针变量a。
int a [ ]没有这种写法。
int *a[]
1、定义a是一个数组。
2、每一个数组的元素是一个指针,指向一个整数。
(int *)a 将指针变量a强制转换为整型指针,说明a一般不是一个整型指针,也可以是个整型指针。
int (*a)[]
1、定义a是一种指针。
2、a指向一种整数数组。
扩展资料
数组的创建:在创建数组时,我们必须定义数组的类型和大小,数组的大小不能为0,数组中的元素类型都是相同的。
int arr[10];//[]内必须是常量/常量表达式(3+8),不能是一个变量(x...)
数组的初始化:在数组创建时,我们也要必须为数组初始化。
int arr1[3] = {1, 2, 3};
int arr2[] = {1, 2, 3};//在这里,我们arr[3]里边的数字可以不用写;
int arr3[3] = {1, 2};//也是可以的,只是把最后一个数初始化为0了而已
int arr4[3] = {1, 2, 3, 4};//是不可以的,不能超过数组长度
char arr5[3] = {'a', 98, 'c'};//因为是字符类型,所以98其实就是字符'b'
char arr6[] = "abcdef";
特点
1、数组是相同数据类型的元素的集合。
2、数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。
3、数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。例如,a[0]表示名字为a的数组中的第一个元素,a[1]代表数组a的第二个元素,以此类推。
参考资料来源:百度百科—数组
指针与数组的区别:
1、指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置(地址);数组的本质则是一系列的变量。
2、数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。指针可以随时指向任意类型的内存块,它的特征是"可变",所以我们常用指针来操作动态内存。
3、当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
int *a;则是 指定义一个int 类型的指针 用来指向一个用来存放int型数据的地址。
数组名 所表示的意思是 该数组起始地址。不是有没有区别的问题。它们根本是在不同的情况下使用的。你可以用数组名表示数组第N个元素 *(a+(N-1)) 你也可以定义 一个指针指向 第N个元素
int *p=&a[N-1];
=======================================
你所给的例子中使用是合法的 形参表示类型。int a[]表示一个整型数组。
我所列的题目是不是可以int *a和int a[ ]都算正确写法?
还是只能写int a[ ]
void fun(int a[], int n)
这里的int a[]表示 一个数组类型的参数。
void fun(int *a, int n)
而 int *a则表示 一个指针类型的参数。
你若是非得这么写 那么函数内部则应 使用*(a+N-1)的方式表示元素。不是说只能写 不能写的问题。要活用 一个问题编程解决方法肯定不止一种。指针 再理解理解。
int *a; 则不会
void fun(int a[], int n) //函数传递数组参数时,要传递的是数组的地址,int a[]这不是地址
void fun(int *a, int n) //要这样写