学习笔记—C语言基础篇05
2017-05-12 13:55
176 查看
一级指针:指向变量的地址
指针存放的是变量在内存中的地址编码;
指针的大小在32位情况下大小都是4字节;
野指针:指针变量指向了一个未知的空间,如果操作该空间可能会报错
0-255都是被操作系统占用的只读内存空间;
通过操作野指针改变内容可能会导致程序异常: (int* p = 10野指针; *p = 10操作地址对应的内容;)
void*:万能指针可以指向任意类型变量的地址
void* 指针名 = & 常量;
void* 类型变量在通过地址操作变量的值,需要强制转换为相同类型的指针
const:定义常量
const定义的变量可通过指针修改其值,所以不安全
const修饰靠最近的
数组与指针
数组的下标具有降级的功能,相当于解引用;
数组名就是数组的首地址 是一个常量,可以参与运算但不能被赋值;
数据类型* 指针名 = 数组名 可以通过指针来操作数组;
注意指针数据类型必须与数组数据类型相同
int arr[]={1,2,3,4,5,6,7};
int* p = arr; | int* p = &arr;(二级指针)
*(p++) = arr[1]; |p++->跨过整个数组空间
指针数组 int* p[3] 数组里面的每一个元素都是一个指针
数组指针 int (*P)[3] 一个指向数组地址的指针
指针存放的是变量在内存中的地址编码;
指针的大小在32位情况下大小都是4字节;
野指针:指针变量指向了一个未知的空间,如果操作该空间可能会报错
0-255都是被操作系统占用的只读内存空间;
通过操作野指针改变内容可能会导致程序异常: (int* p = 10野指针; *p = 10操作地址对应的内容;)
void*:万能指针可以指向任意类型变量的地址
void* 指针名 = & 常量;
void* 类型变量在通过地址操作变量的值,需要强制转换为相同类型的指针
const:定义常量
const定义的变量可通过指针修改其值,所以不安全
const int a = 10; int* pa = &a; *pa = 100;
const修饰靠最近的
int a = 10; int b = 20; int c = 30; const int* pa = &a; //修饰int* 不能改变指针指向的地址的值 //*pa = 100; 不能被修改 int* const pb = &b; //修饰pb,不能修改指针的值 //pb = &c;不能被修改 const int* const pc = &c;//都不能修改但可以通过二级指针进行修改
数组与指针
数组的下标具有降级的功能,相当于解引用;
数组名就是数组的首地址 是一个常量,可以参与运算但不能被赋值;
数据类型* 指针名 = 数组名 可以通过指针来操作数组;
注意指针数据类型必须与数组数据类型相同
int arr[]={1,2,3,4,5,6,7};
int* p = arr; | int* p = &arr;(二级指针)
*(p++) = arr[1]; |p++->跨过整个数组空间
指针数组 int* p[3] 数组里面的每一个元素都是一个指针
数组指针 int (*P)[3] 一个指向数组地址的指针
#include <stdio.h> #include <string.h> int main() { int arr1[] = {60,60,60}; int arr2[] = {70,70,70}; int arr3[] = {80,80,80}; int* parr[] = {arr1,arr2,arr3}; int sum = 0; for(int i = 0; i < 3;i++) { for(int j = 0; j < 3; j++) sum += *(*(parr + i) + j);//方法1 //sum += *(parr[i] + j);//方法2 //sum += parr[i][j];//方法3 } printf("%d ",sum); system("pause"); return 0; } ///////////////////////////////////////////////////////////// char ch1[] = "hello";//字符串以'\0'结束 char* p = &ch1+1; printf("%c\n",*(p - 2)); 输出‘o’; //////////////////////////////////////////////////////////// char ch1[] = "habchello";//字符串以'\0'结束 int* p = &ch1+1; printf("%c\n",*(p - 2)); 输出‘b’
相关文章推荐
- Java语言程序设计-基础篇第二章基本程序设计
- 学习笔记 05 --- JUC锁
- 黑马程序员--Java语言基础篇
- Java多线程系列--“基础篇”05之 线程等待与唤醒
- 基础篇--05Java数组
- 05--MySQL自学教程:DDL(Data Definition Language:数据库定义语言)操作数据库(一)
- 【Linux 基础篇】之网络、语言、级别等配置
- Java多线程系列--“基础篇”05之 线程等待与唤醒
- .net学习笔记-C#语言基础篇2
- 数据结构教程(java语言描述)徐孝凯主编----复习摘要05
- c语言基础学习05_数组和字符串
- .Net Compact Framework 基础篇(10)--多语言程序的定制
- 20161212C语言基础05_复习及作业
- 20161212C语言基础05_复习及作业
- 【JAVA语言程序设计基础篇】--图形--一些练习
- C语言学习历程——Training02位运算05
- 前端语言基础篇 之 【常见样式详解】
- Java语言程序设计-基础篇-第八版-复习题-第八章
- Java语言程序设计基础篇 循环(四)
- 机器学习笔记之R语言基础篇3(概率分布1)