#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 3;
int b = 45;
int c = -9;
int* parry[3];
parry[0] = &a;
parry[1] = &b;
parry[2] = &c;
int i;
for(i=0;i<3;i++)
{
printf(" %d ",*(parry[i]));
}
putchar('\n');
system("pause");
return 0;
}
指針陣列按照我們白話文說的就是,指針的陣列,說白了它總的就是一個數組,承載了多個指針變數的陣列。定義方式:int* parry[3]
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[3]={8,23,3};
int* p2;
int (*p)[3];
p=a;
p2=a;
printf("地址一:%p\n",a);
printf("地址二:%p\n",&a[0]);
printf("地址三:%p\n",p);
printf("地址四:%p\n",p2);
printf("陣列指針的偏移:%p\n",++p);
printf("普通指針的偏移:%p\n",++p2);
system("pause");
return 0;
}
結果:
陣列的指針,顧名思義就是承載着陣列量的一個指針,爲什麼這麼說呢,我們都知道指針的偏移是有規律的,什麼數據型別的指針就偏移相應的位元組量,正因爲如此,在普通指針中如*p2它的偏移量就應該是(0060FEE0-0060FEDC)4,也就是一個整形變數,而在陣列指針中卻是(0060FEE8-0060FEDC)12,也就是sizeof(3x(int))個位元組,所以看得出,陣列指針偏移量就是陣列的個數
#include <stdio.h>
#include <stdlib.h>
void printWelcom()
{
printf("祖國加油\n");
}
int main()
{
printWelcom();
void (*p)();
p=printWelcom;
p();
(*p)();
printf("%p\n",p);
#include <stdio.h>
#include <stdlib.h>
int add(int a,int b)
{
return a+b;
}
int main()
{
int a=3;
int b=3;
int ret;
int ret2;
int ret3;
ret=add(a,b);
int (*padd)(int a,int b);
padd=add;
ret2=padd(a,b);
ret3=(*padd)(a,b);
printf("指針函數:%d\n",ret);
printf("指針函數:%d\n",ret2);
printf("指針函數:%d\n",ret3);
printf("%p\n",padd);
printf("%p\n",&add);
system("pause");
return 0;
}
可見,定義一個函數指針的方式類似於定義一個函數,該指針指向哪個函數,就按照這個函數的型別去定義,這樣一來指針就指向了該函數,也就成了函數指針,對於函數指針可以直接用padd(a,b)這樣的方式呼叫,也可以(*padd)(a,b)來呼叫
malloc函數是用來在C語言中動態分配記憶體的,一般來說malloc的格式是這樣的:void malloc(),()內填入想要開闢的空間大小,而在實際運用當中一般都是把無型別換成整形,實型或者字元型等等。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
int i;
printf("請輸入你想要開闢的陣列空間大小:");
scanf("%d",&n);
int *parry=(int*)malloc(n*sizeof(int));//利用指針,malloc函數定義陣列的方法
for(i=0;i<n;i++)
{
printf("請輸入第%d個數:\n",i+1);
scanf("%d",&parry[i]);
}
for(i=0;i<n;i++)
{
printf("第%d個數:%d\n",i+1,(*parry)++);
}
system("pause");
return 0;
}
無型別的指針定義之後,用malloc開闢的空間可以用來當做一個數組來使用,換句話說陣列的定義除了傳統的直接定義,還可以用分配空間給指針的方式來定義一個數組