C語言:指標型別。
阿新 • • 發佈:2021-01-14
所佔空間
不同指標型別的指標,所佔空間大小相同。因為,指標本質是一個地址,地址與計算機的位數有關,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;
}