-
-
[分享]C语言基础五-指针
-
发表于: 2021-5-12 17:55 4458
-
指针的含义包含三个方面:变量、地址、内存宽度:
在定义指针的时候,*和类型结合,表示指针的类型; 在使用指针的时候,*和指针结合,表示解引用。
可以让指针指向某个变量的地址,也可以让指针指向一个分配的内存或者字符串常量,还可以指向NULL。
定义一个指针,指针类型的变量长度为4或者8,即sizeof(p)= 4or8,指针所指类型的长度为sizeof(*p)。
void*类型的指针变量,没有指定内存的宽度,其他类型指针隐式转换成该类型,不能用*p解引用取值,需要先转换成特定类型再取值。对于指针变量void* p:
char*类型的指针变量,既可以指向字符,也可以指向字符串,即字符串首个字符的地址。字符指针初始化时,字符使用单引号,字符串使用双引号。
指针支持加减运算,不支持其他算术运算。对于指针p,指针的加法运算p+n,p向后移动的距离不是n个字节,而是n个指针所指类型的单位长度,即nsizeof(p),减法运算与此类似。
数组名是一个常量指针,指向数组的首地址,指针和数组名可以互相通用。
如果指针做实参,那么传实参的指针就必须使用二级指针,要在函数中改变指针的值,就必须传指针的指针。
指针在声明的时候必须初始化,如果没有初始化,任何指针变量在被创建的时候,不会自动成为NULL指针,会随机的指向任何一个地址,它的缺省值是随机的,即野指针,访问野指针会造成不可预知的后果。
int
nNum
=
1
;
int
*
pNumA
=
&nNum;
int
*
pNumB
=
NULL;
pNumB
=
(
int
*
)malloc(sizeof(
int
));
char
*
szTest
=
"testString"
;
char
*
szBuf
=
szTest;
int
nNum
=
1
;
int
*
pNumA
=
&nNum;
int
*
pNumB
=
NULL;
pNumB
=
(
int
*
)malloc(sizeof(
int
));
char
*
szTest
=
"testString"
;
char
*
szBuf
=
szTest;
int
nNum
=
1
;
int
*
pNum
=
&nNUM;
void
*
p
=
pNum;
printf(
"%d"
,
*
(
int
*
)p);
char
*
szBufA
=
'p'
;
char
*
szBufB
=
"test"
;
int
nNum
=
1
;
int
*
pNum
=
&nNUM;
void
*
p
=
pNum;
printf(
"%d"
,
*
(
int
*
)p);
char
*
szBufA
=
'p'
;
char
*
szBufB
=
"test"
;
int
nArray[
3
]
=
{
1
,
2
,
3
};
/
/
第i个元素
printf(
"%d\n"
,a[i]);
printf(
"%d\n"
,
*
(a
+
i));
/
/
第i个元素的地址
printf(
"%p\n"
,&a[i]);
printf(
"%p\n"
,a
+
i);
int
nArray[
3
]
=
{
1
,
2
,
3
};
/
/
第i个元素
printf(
"%d\n"
,a[i]);
printf(
"%d\n"
,
*
(a
+
i));
/
/
第i个元素的地址
printf(
"%p\n"
,&a[i]);
printf(
"%p\n"
,a
+
i);
/
/
常量指针,p是一个常量指针,不能修改,指向的内存可以修改
int
*
const p;
/
/
指针常量,p是一个指针,指向的内存是常量,不能修改,p本身可以修改
const
int
*
p;
/
/
p是一个常量指针,指向的内存也是常量,都不能修改
const
int
*
const p;
/
/
常量指针,p是一个常量指针,不能修改,指向的内存可以修改
int
*
const p;
/
/
指针常量,p是一个指针,指向的内存是常量,不能修改,p本身可以修改
const
int
*
p;
/
/
p是一个常量指针,指向的内存也是常量,都不能修改
const
int
*
const p;
/
/
指针数组,存放
10
个指针的数组
int
*
a[
10
];
/
/
数组指针,存放的是地址,指向另一个指针,有
10
个元素的数组的首地址
int
(
*
a)[
10
];
/
/
指针数组,存放
10
个指针的数组
int
*
a[
10
];
/
/
数组指针,存放的是地址,指向另一个指针,有
10
个元素的数组的首地址
int
(
*
a)[
10
];
/
/
为指针分配堆内存
char
*
p
=
(char
*
)malloc(
128
);
if
(p
=
=
NULL)
{
return
1
;
}
/
/
为指针分配堆内存
char
*
p
=
(char
*
)malloc(
128
);
if
(p
=
=
NULL)
{
return
1
;
}
赞赏
他的文章
- [分享]C++基础十七-异常机制 8580
- [分享]C++基础十六-模板 8941
- [分享]C++基础十五-运算符重载 8964
- [分享]C++基础十四-抽象类 8677
- [分享]C++基础十三-多态 8477
看原图
赞赏
雪币:
留言: