1. 程式人生 > 其它 >C語言:指標型別。

C語言:指標型別。

技術標籤:C語言應用c語言

所佔空間

不同指標型別的指標,所佔空間大小相同。因為,指標本質是一個地址,地址與計算機的位數有關,32位地址就是4個位元組;64位地址就是8個位元組。

#include <stdio.h>
//32位系統。
int main()
{
	int a = 1;
	int* p1 = &a;
	char* p2 = &a;
	double* p3 = &a;
	printf("%d\n", sizeof(p1));//4
	printf("%d\n", sizeof(p2));//4
	printf(
"%d\n", sizeof(p3));//4 }

指標型別的意義

1、指標的型別決定了指標向前或者向後走一步有多大(距離)

#include <stdio.h>
//32位系統。
int main()
{
	int n = 10;
	char* pc = &n;
	int* pi = &n;
	printf("%p\n", pc);
	printf("%p\n", pc + 1);//步長為1
	printf("%p\n", pi);
	printf("%p\n", pi + 1
);//步長為4 return 0; }

2、指標的型別決定了,對指標解引用的時候有多大的許可權(能操作幾個位元組)。 比如: char* 的指標解引用就只能訪問一個位元組,而 int* 的指標的解引用就能訪問四個位元組。

#include <stdio.h>
//32位系統。
int main()
{
	int arr[10] = { 0 };
	int* p = arr;
	int i = 0;
	for ( i = 0; i < 10; i++)
	{
		*(p + i) = 1;//每次改四個位元組
	}
	for ( i = 0; i < 10; i++)
	{
		printf
("%d\n", arr[i]);//arr[10]全是1,賦值成功。 } return 0; }
#include <stdio.h>
//32位系統。
int main()
{
	int arr[10] = { 0 };
	char* p = arr;
	int i = 0;
	for ( i = 0; i < 10; i++)
	{
		*(p + i) = 1;//每次只改1個位元組。
	}
	for ( i = 0; i < 10; i++)
	{
		printf("%d\n", arr[i]);//賦值失敗
	}
	return 0;
}