c语言数组指针移位,C语言数组指针_3
C語言中的數(shù)組指針與指針數(shù)組:
·數(shù)組指針
一、區(qū)分
首先我們需要了解什么是數(shù)組指針以及什么是指針數(shù)組,如下:
int *p[5];
int (*p)[5];
數(shù)組指針的意思即為通過指針引用數(shù)組,p先和*結(jié)合,說明了p是一個指針變量,指向一個大小為5的數(shù)組。所以,int (*p)[5]即為一個數(shù)組指針。int *p[5]則是一個大小為5且存放整型指針的數(shù)組。
二、數(shù)組元素的指針
1.定義
指針變量既然可以指向變量,同樣的,也能指向數(shù)組元素,因此,數(shù)組元素的指針就是數(shù)組元素的地址。
它的寫法為:
int *p=arr;
int *p=&a[0];
這邊我們需要再次明確,數(shù)組名并不代表整個數(shù)組,只是代表數(shù)組首元素的地址,因此上面兩個語句是一樣的。
2.運(yùn)算
由于指針指向的是一個地址,因此數(shù)組指針也同樣可以進(jìn)行相關(guān)運(yùn)算;例如指針的加減可以實現(xiàn)指針指向數(shù)組上一個或者下一個元素的功能。這邊需要說明,數(shù)組指針中進(jìn)行乘法和除法是沒有意義的。
如下圖所示:
在定義指針變量的時候需要定義類型,如果指針p指向了一個數(shù)組中的一個元素,那么p+1并不是將地址加上1,而是系統(tǒng)判定類型之后加上一個數(shù)組元素所占用的字節(jié)數(shù)(即為p+1*d)。
3.通過指針引用數(shù)組元素
代碼如下圖:
#include
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,0};
int *p;
for(p=a ; p
{
printf("%d ",*p);
}
printf("
");
return 0;
}
先讓指針p指向a數(shù)組的首元素,打印*p(即指向數(shù)組的值),然后執(zhí)行p++,使得p指向下一個元素,直到輸出數(shù)組的十個元素為止。
三、通過指針引用多維數(shù)組
1.多維數(shù)組元素的地址
我們以二維數(shù)組為例,首先需要明確一點的是二維數(shù)組的首元素地址并非一個單個元素,而是首行的地址,如下圖:
下面我們列出相關(guān)地址的表示方式:
表示形式含義
a????二維數(shù)組名,指向a[0]
a[0], *(a+0), *a0行0列元素地址
a+1, &a[1]1行首地址
a[1], *(a+1)a[1][0]的地址
a[1]+2, *(a+1)+2, &a[1][2]
a[1][2]的地址
*(a[1]+2), *(*(a+1)+2), a[1][2]a[1][2]的值
上圖都是二維數(shù)組中地址的不同表示形式。
2.指向多維數(shù)組的指針變量
輸出每一個值依然可以像一維數(shù)組一樣,但這里我們可以介紹一種新的方法:
int main()
{
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int (*p)[12];
int i=0;
p=&a;
printf("%d
",(*p)[11]);
return 0;
}
就像我們前面的例子一樣,int(*p)[12]表示定義一個指針變量,它指向一個包含12個整型元素的一堆數(shù)組。我們將其設(shè)定為12便可以存下整個a數(shù)組,當(dāng)然也可以存一行4個,最后如果輸出的話就方便了許多。
四、數(shù)組指針作函數(shù)參數(shù)
下面是幾種傳參的方式:
void test()
{
int arr[3][5] = {0};
print(arr);
}
void print(int arr[3][5])
{}
void print(int arr[][5])
{}
void print(int **arr)
{}
void print(int (*arr)[5])
{}
我們可以看出第三種方式明顯是不行的,這邊引用了一個二級指針,但是我們上面提到過數(shù)組的地址應(yīng)該放到數(shù)組指針中去。而第四種方法就是我們上面提到過的,而這種方式是可行的。
下面是一個一級指針傳參的例子:
#include
void print(int *p, int sz)
{
int i = 0;
for(i=0; i
{
printf("%d
", *(p+i));
}
}
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9};
int *p = arr;
int sz = sizeof(arr)/sizeof(arr[0]);
print(p, sz);
return 0;
}
·指針數(shù)組
一、指針數(shù)組
1.定義
int *p[5];
上面使我們剛開始舉出的例子,這就是一個最簡單的指針數(shù)組。因此我們可以得出指針數(shù)組的定義。指針數(shù)組:一個數(shù)組的元素均為指針類型數(shù)據(jù),稱為指針數(shù)組。
假設(shè)我們定義一個數(shù)組,各個元素指向不同的字符串,如下圖:
上圖所示,我們定義一個指針數(shù)組arr,然后把各字符串的地址賦給各個元素,即arr[0]和arr[1]。
通過一個簡單的函數(shù)就可以進(jìn)行輸出了。
二、指向指針數(shù)據(jù)的指針
首先我們可以定義一個指向指針數(shù)據(jù)的指針變量:
char **p;
為了方便我們理解,其實**p也就等于*(*p)。*p表示p為一個指針變量,前面的*表示*p指向的是char *類型的數(shù)據(jù)。換一句話來說,如果引用*p,就是得到p所指向的值,如果拿上面的例子來說就是字符串"Hello"和"World"。
我們可以通過下面的代碼來實現(xiàn):
int main()
{
char *arr[]={"Hello","World"};
char **p;
int i;
for(i=0; i<2; i++)
{
p=arr+i;
printf("%s ",*p);
}
return 0;
}
參考博文:
指針數(shù)組與數(shù)組指針詳解:
C語言指針詳解(經(jīng)典,非常詳細(xì))
總結(jié)
以上是生活随笔為你收集整理的c语言数组指针移位,C语言数组指针_3的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 音乐播放小窗口html,jQuery+h
- 下一篇: InstallShield 软件打包完