1. 程式人生 > 其它 >C語言基礎-指標(一)起源、型別、賦值

C語言基礎-指標(一)起源、型別、賦值

技術標籤:指標c語言經驗分享

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型別變數的地址。

此外還有char*、long*等,描述也類似。

不同型別的指標大小是不一樣的

	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;