C语言入门经典——基础知识(指针 数组 多维数组)
关于指针与数组的总结如下 |
||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
****************************************指针***************************************
******************************能够存储地址的变量称为指针*****************************
指针的声明:
int *pointer = NULL; 或者 int *pointer = 0;
测试指针是否为空:if(!pointer) 或者 if(pointer != NULL)
声明一个指向int类型变量的指针,pointer变量的类型是 Int *,它可以存储任意Int类型变量的地址。
NULL是标准库中定义的一个常量,对于指针它表示0。NULL是一个不指向任何内存位置的值。这表示,使用不指向任何对象的指针,不会意外覆盖内存。
我们知道变量pointer是一个指针是不够的,更重要的是,编译器必须知道它所值的变量的类型。没有这个信息,根本不可能知道它占用多少内存,或者如何处理它所指的内存的内容。
用已声明的变量地址初始化pointer变量,可以使用寻址运算符&,例如: |
---|
int number = 10; int *pointer = &number; 第一条语句会分配一块内存来存储一个整数,使用number名称可以访问这个整数。 pointer的初值是number变量的地址。两句的顺序不能颠倒,编译器要先分配空间,才能使用number的地址初始化pointer变量。 number 和 pointer 的地址是变量在这台计算机上存放的地方。 number变量是一个整数(10),但是pnumber变量是number的地址。 使用*pnumber可以访问number的值,即间接地使用number变量的值。 |
指针的使用:(说明:使用一个指针变量可以改变其它许多变量的值,但是变量的类型要相同)
#include<stdio.h>
int main()
{long num1 = 0L;long num2 = 0L;long *pnum = NULL;pnum = &num1; //get address of num1*pnum = 2; //set num1 to 2++num2; //increment num2printf("num1=%ld num2=%ld\n",num1,num2);// 2 1num2 += *pnum; //add num1 to num2printf("num1=%ld num2=%ld\n",num1,num2);//2 3//指针重新指向了 num2pnum = &num2; //get addres of num2l++*pnum;//increment number2 indirectly
//(++*pnum递增了pnum指向的值 == (*pnum)++ )
//如果省略括号,就会递增pnum所含的地址,printf("num1=%ld num2=%ld\n",num1,num2);//2 4printf("\nnum1=%ld num2=%ld *pnum=%ld *pnum+num2=%ld\n",num1,num2,*pnum,*pnum+num2);//2 4 4 8return 0;
}
指针与常量:
指向常量的指针:
可以改变指针中存储的地址,但是不允许使用指针改变它指向的值。
long value = 999L;const long *pvalue = &value;//把pvalue指向的值声明为const
//可以通过value改变 pvalue指向的值,但是不能通过pvalue指针做这个改变*pvalue = 888L;//error: assignment of read-only location ‘*pvalue’value = 777L;//pvalue指向的值不能改变,但是可以对value进行任意操作
//指针本身不是常量,所以仍可以改变它指向的值。long number = 666L;pvalue = &number;
常量指针:
指针中存储的地址不能改变,但是可以使用指针改变它指向的值。
int count = 43;int *const pcount = &count;printf("==%d\n",*pcount); //43int item = 34;
// pcount = &item;//error: assignment of read-only variable ‘pcount’*pcount = 345;//通过指针引用了存储在const中的值,将其改为345printf("==%d\n",*pcount);//345
指向常量的常指针:
指针中存储的地址不能改变,指针指向的值也不能被改变。
int itemm = 25;const int *const pitem = &item;
****************************************数组***************************************
**********************************相同类型的对象集合*********************************
//数组与指针的区别是:可以改变指针包含的地址,但是不能改变数组名称引用的地址
//数组名称本身引用了一个地址char multiple[] = "My string";char *p = &multiple[0];printf("The address of the first arry element:%p\n",p);//The address of the first arry element:0x7ffddba45350 p = multiple;printf("The address obtained from the array name:%p\n",p);//The address obtained from the array name:0x7ffddba45350
//多维数组
int main()
{char board[3][3] = {{'1','2','3'},{'4','5','6'},{'7','8','9'}};printf("value of board[0][0] : %c\n",board[0][0]);printf("address of board[0][0] : %p\n",&board[0][0]);printf("value of *board[0]: %c\n",*board[0]);printf("address of board[0]: %p\n",board[0]);printf("value of **board : %c\n",**board);printf("address of board : %p\n",board);for(i=0;i<9;i++){printf("board:%c\n",*(*board+i));}return 0;
}
value of board[0][0] : 1
address of board[0][0] : 0x7ffee67e6f50
value of *board[0]: 1
address of board[0]: 0x7ffee67e6f50
value of **board : 1
address of board : 0x7ffee67e6f50
board:1 board:2 board:3 board:4 board:5
board:6 board:7 board:8 board:9
C语言入门经典——基础知识(指针 数组 多维数组)相关推荐
- C语言入门经典——基础知识(数据类型)(32位与64位系统基本数据类型的字节数)
一.读取数据的格式说明符 除此之外: sizeof(char) = 1 ...
- python语言入门w-python基础知识(一)
最近花时间整理了一下以前学过的python基础知识,语言最多的是使用. 1.1 开发模式 交互模式:简单的调试或者测试 开发流程 创建以.py结尾的python文件 在python文件中输入打印&qu ...
- C语言入门系列之6.一维和二维数组
数组 一.数组的概念 二.一维数组的定义与引用 1.一维数组定义 注意事项 常见错误 扩展:一维数组在内存中的存放 2.一维数组的引用 注意事项 3.一维数组的初始化 初始化赋值 动态赋值 三.二维数 ...
- C语言-入门-必备基础知识(九)
进制基本概念 对于进制,我们都很熟悉,从小学开始就知道 1.2-9.10.11- 这就是十进制. 几进制就是逢几进1. 为什么全世界各地都从一开始就习惯使用 10 进制,很简单,因为我们有10个手指头 ...
- C语言基础知识(三)-程序设计结构、数组、字符串处理函数
本文是C语言的基础知识,主要讲解三种程序设计结构.数组.字符串和字符数组.数组元素查询以及字符串处理函数. 程序结构设计 包括C语言在内的几乎任何编程语言都支持以下三种程序设计结构,它们分别是: 顺序 ...
- Java编程语言学习:Java语言编程的基础知识之Java的变量与数据类型、符号、运算符、数组Array总结之详细攻略
Java编程语言学习:Java语言编程的基础知识之Java的变量与数据类型.符号.运算符.数组Array总结之详细攻略 目录 Java语言编程的基础知识之Java的变量与数据类型.符号.运算符.数组总 ...
- C语言指针基础知识点(六)--通过指针引用多维数组
指针系列目录 C语言指针基础知识点(一)–指针及指针变量 C语言指针基础知识点(二)–指针变量的引用 C语言指针基础知识点(三)–指针变量作为函数参数 C语言指针基础知识点(四)–通过 ...
- C语言零基础入门——1.基础知识与环境搭建。
C语言零基础入门--1.基础知识与环境搭建. 好了.终于迎来了第一篇文章,这篇文章要做的事情非常简单,主要有三个事情 第一:C语言的介绍. 第二:计算机的基础知识. 第三:C语言的环境安装 ...
- c语言多维数组基础知识,C语言基础第7章多维数组.ppt
C语言基础第7章多维数组 7.2 二维数组及多维数组二维数组的定义定义方式: 数据类型 数组名[常量表达式][常量表达式]:;二维数组理解;二维数组元素的引用形式: 数组名[下标][下标]二维数组元素 ...
最新文章
- 苹果新功能惹网友众怒,还有隐私可言吗?
- 大家都在讨论裁员,我只想聊聊成长 !
- python怎么安装numpy库-Python NumPy库的安装和使用
- 方案接口服务器问题记录
- 在 IntelliJ IDEA 中创建基本的 Maven 多模块项目
- 列出我所知道的图像处理库
- 用WebORB实现flex + .net后台的Remoting
- Nat. Biotechnol. | 利用深度学习从基因转录数据中预测药物疗效
- 计算机技术在工程施工中的应用,浅析计算机技术及网络在工程施工中的应用
- python基础试题选择题_附带答案的15道经典python基础面试题
- 使用缓冲字符流BufferedReader和文件字符流FileReader读取文本文件
- SpringMVC 统一异常处理
- C# object 转 Intptr, Intptr 转 object
- html 数字加圆圈,word中圆圈数字,圆圈11怎么打
- 计算机右键功能总结,电脑小技巧分享:右键菜单功能使用技巧
- 大家崇拜凯文.米特尼克吗?
- (附源码)ssm自助游服务系统 毕业设计 250858
- “蔚来杯“2022牛客暑期多校训练营5:A Don‘t Starve
- 容安馆札记 588则 笺疏
- LPMS1000-全自动压力校验系统