c语言一维数组指针
1. c语言一维数组指针调用
这个大概也只能用来做理论研究了,实际编程过程中不可能这么写,
int a[10] ; a[i]
int *p ,p=a; p[i]
这两个应该好理解
注意,一旦声明int a[10]
那么a就是一个地址常量了,他是数组a在计算机内存中的首地址
a+2就相当于&a[2]
把他当成一个数组(假设为b)的起始地址的话
(&a[2])[5]也就是一个数组的元素,b[5]
而他对应的原来的a数组元素就是a[7]
看图:
地址:
&a[0] &a[1] &a[2] &a[3] ... &a[9]
a a+1 a+2 a+3 ... a+9
&b[0] &b[1] ... &b[7]
b b+1 ... b+7
元素 a[0] a[1] a[2] a[3] ... a[9]
b[0] b[1] .. b[7]
另外这个
(&a[i])[j] =>a[i+j]
就相应的推出来了
实际上就是要注意
a,a[0],&a[0]三者之间的关系
a是数组的首址,也就是第一个元素的地址,也就是&a[0]
而a[0]就是一个元素
2. C语言关于指向一维数组的指针
变量的值可以改变,常量的值无法改变。
字符串"ab"在程序中为常量,不可改变。
想要改变字符串中元素顺序,可给指针p分配一段空间,再赋值即可。
3. 写程序(C语言),使用指针实现打印一维数组所有元素的操作。
#include<stdio.h>
voidmain()
{
inta[100],*p;
intn,t;/*你所要输入数字的个数*/
p=a;
printf("pleaseinputnumbern:");
scanf("%d",&n);
t=n;
while(n--)scanf("%d",p++);/*以此输入要输入的数字*/
p=p-t;
for(inti=0;i<t;i++)
{
if(i%4==0)printf(" ");
printf("%d ",*(p++));
}
printf(" ");
}
运行结果见附图
4. c语言一维数组,指针,动态存储分配
#include<stdio.h>
#include<string.h>
intmain()
{intn,i,*p;
scanf("%d",&n);
p=(int*)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
{*(p+i)=i+1;
printf("%d",p[i]);
}
return0;
}
5. C语言中一维数组和指针有什么区别
指针都没初始化,运行个毛啊。
应该这样:
6. c语言一维数组指针问题
数组明代表的是改数组的首地址,nums就是第一个元素的的值,nums+1就是第二个元素的值了
7. 请问C语言里一维数组能用数组指针吗如果可以怎么用呢
数组指针可以指向一维数组的。
指针本来就是变量,是用来存放地址的变量。
如:
int (*a)[3],b[12];
a=b;
a++;
之后,*a相当于a[3]
8. C语言:一维数组与指针
#include<stdio.h>
main()
{
int n,i,a[100],*p,s=0;
float aver;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
p=a;
for(i=0;i<n;i++)
s=s+*p++;
aver=1.0*s/n;
printf("和为:%d,平均数为:%.1f\n",s,aver);
}
9. C语言编程,题目1:定义一个一维数组,用指针引用的方法对该数组各元素赋值,然后输出该数组。【未完】
题目1
void main()
{
int i;
char a[3];
*a=1;
*(a+1)=2;
*(a+2)=3;
for(i=0;i<3;i++)
{
printf("%d.\n",a[i]);
}
return;
}
题目二
#include<stdio.h>
void main()
{
int i,j;
int A[3][4]=
{
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};
int (*p)[4]=A;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%d.\n",*(*(p+i)+j));
}
}
return;
}
10. C语言一维数组指针
p=&a;才是=号两边类型匹配。因为p被声明为指向有4个元素的一维整型数组的指针,而a被定义为一个整型数组的第一个元素的指针,所以写成p=a;等号两边类型不匹配,连编译都过不了。而&a就是一个有4个整型元素的一维数组的指针——就是说在int a[4]={1,3,5,7};的定义后,a是1的地址,a+1就2的地址;而&a的值虽与a相同,但&a是整个数组{1,3,5,7}的地址,&a+1就指向7后面的那个单元了。而int (*p)[4];这种声明恰好就是&a的意思,即p是个指针,指向一个4元素整型数组,也就是p+1就要跳过4个int元素所占有的空间。
printf("%d ",(*p)[3]);中的(*p)[3]的意思是这样的:有了p=&a;后,p的地址“值”就是1的地址“值”,但意思是紧挨着存放的1,3,5,7这4个int数的首地址,*p后就是第一个元素1的地址了,那么(*p)[3]就向后移动3个元素位置,应该是7了……这里把*p用()括起来是因为[]的优先级比*高,不括起来就被解释成*(p[3])了,意思就大错了!
这里涉及的指针操作表述起来有些“绕”,得慢慢体会……