Ⅰ c語言指針知識點總結
1.指針的使用和本質分析
(1)初學指針使用注意事項
1)指針一定要初始化,否則容易產生野指針(後面會詳細說明);
2)指針只保存同類型變數的地址,不同類型指針也不要相互賦值;
3)只有當兩個指針指向同一個數組中的元素時,才能進行指針間的運算和比較操作;
4)指針只能進行減法運算,結果為同一個數組中所指元素的下標差值。
Ⅱ C語言指針
在循環里, 可以看出 p[2]=&a[2*4], 所以 p[2]=&a[8]
也就是說p[2]是指向a數組中第9個元素的指針
p[2]+1就是將指針向後移動一個單位, 即指向a數組第10個元素(相當於&a[9])
括弧前面的星號是從地址中取得對應值, 也就是10
Ⅲ c語言中怎樣給指針中添加多個數組的元素
數組指針(也稱行指針)
定義
int
(*p)[n];
()優先順序高,首先說明p是一個指針,指向一個整型的一維數組,這個一維數組的長度是n,也可以說是p的步長。也就是說執行p+1時,p要跨過n個整型數據的長度。
如要將二維數組賦給一指針,應這樣賦值:
int
a[3][4];
int
(*p)[4];
//該語句是定義一個數組指針,指向含4個元素的一維數組。
p=a;
//將該二維數組的首地址賦給p,也就是a[0]或&a[0][0]
p++;
//該語句執行過後,也就是p=p+1;p跨過行a[0][]指向了行a[1][]
所以數組指針也稱指向一維數組的指針,亦稱行指針。
指針數組
定義
int
*p[n];
[]優先順序高,先與p結合成為一個數組,再由int*說明這是一個整型指針數組,它有n個指針類型的數組元素。這里執行p+1時,則p指向下一個數組元素,這樣賦值是錯誤的:p=a;因為p是個不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它們分別是指針變數可以用來存放變數地址。但可以這樣
*p=a;
這里*p表示指針數組第一個元素的值,a的首地址的值。
如要將二維數組賦給一指針數組:
int
*p[3];
int
a[3][4];
p++;
//該語句表示p數組指向下一個數組元素。註:此數組每一個元素都是一個指針
for(i=0;i<3;i++)
p[i]=a[i]
這里int
*p[3]
表示一個一維數組內存放著三個指針變數,分別是p[0]、p[1]、p[2]
所以要分別賦值。
Ⅳ c語言中指針怎麼使用
1、使用場景
使用指針時,必須將它指向一個變數的地址或者為它分配空間方能使用,如下所示:
#include<stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int a[5]={0,1,2,3,4};
int *b,*d;
int c=2;
int *e=a; //e指向a數組首地址
//*b=2; 無法直接初始化
//printf("%d ", *b);
e=e+2; //移動兩個地址單元
d=&c; //d指向c的地址來表示值
c=4; //修改原c變數的值,d指針的值會發生改變
b=(int *)malloc(sizeof(int));//為b分配一個int型空間來直接存儲值
*b=2;//分配空間後可以直接賦值了
printf("this is e,b,c,d :%d %d %d %d ",*e,*b,c,*d);
2、類型說明
(1)int *a :表示一個指向int型變數的指針,指向的是變數的地址單元
(2)char *b:表示一個指向char變數的指針
*a表示的是這個指針指向地址的值,a為此指針本身的地址,這點要明確,一般用*(a+1)、*(a+2)來表示值,如:
int nums[5]={0,1,2,3,4};
int *a=nums;
printf("%d %d %p ",*a,*(a+1),a);
(4)c語言指針元素擴展閱讀:
指針的運算
指針指向變數地址,若原變數的內容發生了變化,它本身也會發生變化,指針之間的運算一般為值運算和地址運算
(1)值運算:直接通過*運算方式,像a+*(a+1),結果為第一個元素與第二個元素相加。
int nums[5]={0,1,2,3,4};
int *a=nums;
(2)地址運算:通過a+i的方式.指針會指向a的下i個地址。
int nums[5]={0,1,2,3,4};
int *a=nums;
a=a+2;
printf("%d ",*a);
結果輸出2。