C语言编程中的指针

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言编程中的指针相关的知识,希望对你有一定的参考价值。

单片机编程中,涉及指针的地方很多,需要多看多练习多总结。
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
unsigned int pInt32;//指向32位无符号整数的指针
unsigned int UINT32_1;//32位的无符号整数
unsigned int Array1_UINT32[]={1,9,0,1};//存储4个32位无符号整数的数组
unsigned short UINT16_1;//16位的无符号整数
unsigned char UINT8_1;//无符号的字符,8位的无符号整数
unsigned char UINT8_2[]={"VC++6.0"};//无符号的字符数组
UINT16_1=401;
UINT32_1=19;
pInt32=&UINT32_1;
printf("------\n");
printf( "
pInt32的指针地址:%x,存放的内容:%x,指向的内容:%d \n",&pInt32,pInt32,pInt32);
printf("------\n");
printf( "变量UINT32_1的地址:%x,内容:%%d\n",&UINT32_1,UINT32_1);
pInt32=Array1_UINT32;
printf( "
pInt32的指针地址:%x,存放的内容:%x,指向的内容:%d \n",&pInt32,pInt32,pInt32);
printf( "Array1_UINT32数组的地址:%x,内容:%d\n",&Array1_UINT32,Array1_UINT32[0]);
printf("--强制转换--\n");
//pInt32=&UINT16_1;//不报错
pInt32=(unsigned int)(&UINT16_1);
printf( "UINT16_1的地址:%x,内容:%d\n",&UINT16_1,UINT16_1);
printf( "
pInt32的指针地址:%x,存放的内容:%x,指向的内容:%d \n",&pInt32,pInt32,*pInt32);

return EXIT_SUCCESS;

}

结果输出:

*pInt32的指针地址:12ff44,存放的内容:12ff40,指向的内容:19

变量UINT32_1的地址:12ff40,内容:%d
pInt32的指针地址:12ff44,存放的内容:12ff30,指向的内容:1
Array1_UINT32数组的地址:12ff30,内容:1
--强制转换--
UINT16_1的地址:12ff2c,内容:401
pInt32的指针地址:12ff44,存放的内容:12ff2c,指向的内容:-859045487

总结:

1、unsigned int *pInt32;//指向32位无符号整数的指针

  pInt32=&UINT32_1;
  前面是定义一个指针,pInt32里面放的是地址,地址指向的是具体的内容(值),而pInt32本身也有地址,它们都是可以改变的。

  是取值符号,pInt32表示取得它地址所指的值,&是得到地址的符号。

2、指针可以强制转换,但类型最好一致,否则有可能出现不可预料的结果。

3、对于定义指针前面的修饰符号,按照从右向左来理解:
  const int p; //指针可改变,但是所指的内容不可以变=》p是指向整数常量的指针
  int
const p;//指针不可改变,但是所指的内容部可改变=》p是常量指针,指向整数
?

以上是关于C语言编程中的指针的主要内容,如果未能解决你的问题,请参考以下文章

在C代码中将结构体变量作为参数传递效率忒低

ZZC 语言中的指针和内存泄漏 & 编写高效的C程序与C代码优化

更新:C++ 指针片段

Struct中的C语言指针数组

C 语言数组 ( 指针数组用法 | 自我结束能力 )

C 语言行指针与列指针详解