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])了,意思就大錯了!
這里涉及的指針操作表述起來有些「繞」,得慢慢體會……