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是常量指针,指向整数
?

原文地址:https://blog.51cto.com/dawn0919/2369687

时间: 2024-10-22 19:01:12

C语言编程中的指针的相关文章

[C] 在 C 语言编程中实现动态数组对象

对于习惯使用高级语言编程的人来说,使用 C 语言编程最头痛的问题之一就是在使用数组需要事先确定数组长度. C 语言本身不提供动态数组这种数据结构,本文将演示如何在 C 语言编程中实现一种对象来作为动态数组. /* Author: [email protected] */ 基本的 C 数组 C 语言编程中声明一个基本数组如下: int main() { // 声明一个容纳 3000 个整数的数组 int my_array[3000]; } 以上代码做了两件事: ● 在栈区开辟内存空间.准确说来是在

R语言编程中的常见错误

R语言编程中的常见错误有一些错误是R的初学者和经验丰富的R程序员都可能常犯的.如果程序出错了,请检查以下几方面.? 使用了错误的大小写.help().Help()和HELP()是三个不同的函数(只有第一个是正确的).? 忘记使用必要的引号.install.packages("gclus")能够正常执行,然而Install.packages(gclus)将会报错.? 在函数调用时忘记使用括号.例如,要使用help()而非help.即使函数无需参数,仍需加上().? 在Windows上,路

各种语言编程中的注释总结

JAVA: 单行注释 // 多行注释 /*..........*/ 多行注释快捷键:Ctrl+/ 或者 Ctrl+Shift+C 或者 Ctrl+Shift+/ HTML: <!-- 注释内容 --> JSP中的HTML注释: <!-- 注释内容 --> JSP页面中的普通注释 <% // 注释内容 %>    <% /* 注释内容 */ %> .....

C语言编程中pid, tid以及真实pid的关系

对于ubuntu14.04操作系统,可以在/usr/src/linux-headers-4.4.0-31/include/linux/sched.h文件中看到进程控制块的结构体,如下 struct task_struct { volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ void *stack; atomic_t usage; unsigned int flags; /* per process flags, d

PL/SQL语言编程中异常分类及其处理

--预定义异常:系统已经声明的异常DECLARE V_NAME EMP.ENAME%TYPE;BEGIN SELECT ENAME INTO V_NAME FROM EMP WHERE EMPNO = 1234; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('未查到数据'); WHEN OTHERS THEN dbms_output.put_line('其他异常');END; --非预定义异常:系统异常,系统没有对其进行声明DEC

在 JNI 编程中避免内存泄漏

JAVA 中的内存泄漏 JAVA 编程中的内存泄漏,从泄漏的内存位置角度可以分为两种:JVM 中 Java Heap 的内存泄漏:JVM 内存中 native memory 的内存泄漏. Java Heap 的内存泄漏 Java 对象存储在 JVM 进程空间中的 Java Heap 中,Java Heap 可以在 JVM 运行过程中动态变化.如果 Java 对象越来越多,占据 Java Heap 的空间也越来越大,JVM 会在运行时扩充 Java Heap 的容量.如果 Java Heap 容量

解析Java的JNI编程中的对象引用与内存泄漏问题

JNI,Java Native Interface,是 native code 的编程接口.JNI 使 Java 代码程序可以与 native code 交互--在 Java 程序中调用 native code:在 native code 中嵌入 Java 虚拟机调用 Java 的代码.JNI 编程在软件开发中运用广泛,其优势可以归结为以下几点: 利用 native code 的平台相关性,在平台相关的编程中彰显优势. 对 native code 的代码重用.native code 底层操作,更

C语言编程入门——动态内存分配

内存管理,是指软件运行时对计算机内存资源的分配和使用的技术.其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源.内存管理是C语言编程中重要的组成部分,C语言中的内存需要手动分配,手动释放,一般遵循分配多少,释放多少,以免造成内存泄漏.内存管理是一项重要且复杂的事情,理解内存管理,对后面课程及项目的学习会有很大的作用. 之前创建变量,是系统自动分配的内存,放在栈内存中,销毁后被系统自动回收,手动分配的内存,放在堆内存中,需要手动释放.千万不要忘记销毁对象手动将内存释放并将指针

黑马程序员--C语言中的指针(5)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 指针型函数 前面我们介绍过,所谓函数类型是指函数返回值的类型. 在C语言中允许一个函数的返回值是一个指针(即地址), 这种返回指针值的函数称为指针型函数. 定义指针型函数的一般形式为: 类型说明符 *函数名(形参表) { …… /*函数体*/ } 其中函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针.类型说明符表示了返回的指针值所指向的数据类型. 如: int *ap(int