C語言基礎-指標(一)起源、型別、賦值
阿新 • • 發佈:2021-01-18
Hello World! 這是第一篇技術部落格。
指標的引入
當存在一個變數a=9,我們可以通過以下兩種方式訪問a:
第一種:通過變數名訪問
int a = 9;
printf("%a",a);
第二種:通過地址訪問
int a = 9;
printf("%d",*(&a));
通過這兩種方式均可得到變數a中的值,為了第二種訪問的方法的簡化,引入一個指標b表示變數a的地址。
int a = 9;
int* b = &a;
printf("%d",*b);
地址?=指標
指標=當然等於=地址
int main()
{
int a=8;
int* b=&a;
printf("a的地址:%p,b的地址=%p\n",&a,&b);
printf("a的內容:%d,b的內容=%p\n",a,b);
system("pause");
return 0;
}
b指標的內容與a地址一致,指標=地址
指標的定義
指標變數與其他變數(如整型變數、字元變數等)一樣也需要設定型別與賦值。
設定型別
int a=5;
int* b;
b=&a;
int* 表示i該指標(地址)int型別指向(存放的是)一個int型別變數的地址。
不同型別的指標大小是不一樣的
int a = 1;
int* a1 = &a;
char b = 2;
char* b1 = &b;
int i = 1;
for(i = 1;i <= 2; i++){
printf("int型:第%d次a的地址是%p\n",i,a1++);
}
for(i = 1;i <= 2; i++){
printf("char型:第%d次b的地址是%p\n",i,b1++);
}
int型指標自增一次為4個位元組,char型為1個位元組,其他型別也是類似。
可以利用這的特性,通過指標遍歷陣列
int i = 0;
int a[3] = {1,2,3};
int* b = &a[0]; //此處也可以寫成int* b = &a;
for(i = 0;i <= 2; i++){
printf("第%d次a的值是%d\n",i,a[i]);
printf("通過指標:第%d次a的值是%d\n",i,*b++);
}
同時也易推出,在這種情況下,指標和陣列可以互相替代
int i = 0;
int a[3] = {1,2,3};
int* b = a;
printf("a: %p\n",a);
printf("&a: %p\n",&a);
printf("&a[0]: %p\n",&a[0]);
printf("b: %p\n",b);
常被用於定義函式的形式引數,如下:
int init(int data[],int size)//第一句
int init(int *data,int size)//第二句
兩句表示的意思一致
設定的型別需與指向(存放)型別一致
若不一致,若用到指標偏移時地址可能出現錯誤。此方法也可以用於判斷計算機的大小端。
賦值
注意賦值要為地址,,兩種方法皆可。
第一種方式
int a = 5;
int* b;
b = &a;
第二種方式
int a = 5;
int* b = &a;