C基础--初学指针
一、指针简介(任何指针变量在内存中占八个字节的存储空间)
1.定义指针变量(格式):变量类型 *变量名;--定义一个指向整形变量的指针 int *p;
2.作用:指针变量就是用来存储其他变量的地址;--int a=10;
//指针将变量a的地址赋给指针变量p
p = &a;//&是取地址符号,数组有两种方法获得内存中的地址--例:
方法1:数组的变量名就是数组内存中的地址
//定义一个int类型的数组
int ages[2] = {10, 20 };//将数组的地址赋给指针变量p
p = ages; 或者 p = &ages;
方法2:数组中的第一个的地址就是该数组的地址--定义变量之后,在内存中开辟存储空间是从大到下寻地址,存放变量时,是在开辟的空间中,从小到大分配地址
p = ages[0];
图解:只是为了讲解,内存地址有地方不对

3.访问:
指针变量中存入了某个变量的地址后,,可以通过地址来访问或者改变地址中的变量,方式:
*p = 11;
二、指针注意点:
1.任何指针变量都占用8个字节的存储空间
2.指针类型只能指向对应类型的变量,比如int *p只能指向int类型的数据,不然会出错
3.指针是用来存储地址的,不要随便赋值一个变量。例如:
float *p1 ; p1 = 100 ;--这是错误写法
4.float f =1.5f ;
float *p = &f ;//这一句代码其实做了2件事--1)定义了指针变量p;2)让指针变量p指向了f
*p = 5.6f ;
三、指针和数组
利用指针遍历数组元素,方法一:这种遍历方式,指针的值从未变过
void test3()
{
int ages[] = {, , , }; int *p = ages; //p + 1; // &ages[1]
//p + 2; // &ages[2]
//p + 3; // &ages[3]
//p + i; // &ages[i] for (int i = ; i<; i++)
{
int num = *(p + i);
printf("ages[%d]=%d\n", i, num);
} // 这种遍历方式,指针的值从未变过
printf("%d\n", *p); }
利用指针遍历数组元素,方法二:这种遍历方式,指针的值一直在改变
void test5()
{
int ages[] = {, , , }; int *p = ages; for (int i = ; i<; i++)
{
printf("ages[%d]=%d\n", i, *p);
p++;
// p = p + 1;
} // 这种遍历方式,指针的值一直在改变
}
四、详解指针的p+1
1.指针变量的+1并不是基本数据类型中简单的+1;
2.p+1究竟是增加了多少,取决于指针的类型;
指针的p+1跟指针所指向的数据类型有关,如下:
char * 1
int * 4
double * 8
long * 8
五、指针与字符串:重点--char *name = "hello" ;-->不可改变(可以理解为字符串常量) char name[] = "hello" ;-->可以改变(可以理解为字符串变量)
1.利用数组存储的字符串是可变的
void test1()
{
int a; // 利用数组存储的字符串是可变的
char names[] = "itcast"; //char names[] = {'i', 't', 'c', 'a', 's','t', '\0'}; char *p = names; *(p + ) = 'A'; //printf("%s\n", p + 2); printf("%s\n", names);
}
2.直接利用 指针变量指向的字符串,是不可变的
void test2()
{
// names这个指针变量指向了字符串的首字符'i'
// 直接利用指针变量指向的字符串,是不可变
char *names = "itcast";
char *names2 = "itcast"; // names和names2指向的是同一个字符
printf("names=%p\n", names);
printf("names2=%p\n", names2);
}
3.学习指针之前的字符串存储
char name[] = "hello" ;
char names[2][10] = { "hello" , "world" };
4.学习指针之后的字符串存储:
char *name = "hello" ;
//指针数组:数组里面装的元素是指针
//整形数组:数组里面装的元素是整型数据
char *names[2] = { "hello" , "world" } ;
C基础--初学指针的更多相关文章
- GO学习-(10) Go语言基础之指针
Go语言基础之指针 区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针. 要搞明白Go语言中的指针需要先知道3个概念:指针地址.指针类型和指针取值. Go语言中的指针 任何程序数 ...
- C++基础——函数指针 函数指针数组
==================================声明================================== 本文版权归作者所有. 本文原创,转载必须在正文中显要地注明 ...
- go基础语法-指针
1.基础定义 golang的指针没有cpp等语言的指针复杂,具体表现在其不可用于运算.只有值传递 语法:var variableName *int = memoryAddr var a = 2 var ...
- 黑马程序员_ C语言基础之指针(三)
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 概览 指针是C语言的精髓,但是很多初学者往往对于指针的概念并不深刻,以至于学完之后随着时间的推移 ...
- C++学习基础二——指针与引用的区别
一.指针: (1)如果对指针进行解引用操作 赋值,改变的是指针所指向对象的值:(2)如果不对指针进行解引用操作 赋值,则改变的是指针本身的值:(3)const指针本身的值不能修改,但是const指针所 ...
- C基础--函数指针的使用
之前在看代码的时候,看了函数指针的使用,大体分为如下几类: 做一个function list,通过指针索引调用,使得处理功能类似的函数看起来更加清晰: 函数指针作为另一个函数的参数,用作回调: lin ...
- C语言基础:指针类型与指针和数组、字符串的关系
//指针变量就是用来存储地址的,只能存储地址 格式: int *p; 这个p为指针变量:指针变量占8个字节 类型是用来说明这个指针指向的类型: 比如上边的int代表这个指针变量会指向int类型的 ...
- 【C++基础】 指针&字符串&数组
先贴代码,总结以后再写,和5中内存分配方式密切相关 PS: str 返回整个字符串,str[0],*str返回首字符h char *strA(){ char str[]="hello!&qu ...
- 【C++基础】指针好难啊,一点点啃——基本概念
指针保存的是另一个对象的地址(概念真的很重要!!) ; int *ptr = &a;//*定义一个指向int类型的指针ptr, &a取变量a的地址 引用是对象的别名,多用于函数形参,引 ...
随机推荐
- UVALive 6255 Kingdoms --状态搜索
题意:n个国家,给出国家间相互的债务关系,每个国家如果债务>收入就要破产,破产后该国的所有债务关系全部清除,第一个破产的国家不同有可能造成最后的没破产的国家的不同,问哪些国家有可能成为独自存活的 ...
- UESTC 32 树上战争(Battle on the tree)
这题其实很简单,每个人肯定都往上走,才能保证尽快赢,所以无非是看谁离根节点近,即深度小..用并查集中的findset思想,不断找父节点一直到根节点来找深度就可以了. 代码: #include < ...
- POJ 2001 Shortest Prefix
字典树基本题. 代码: #include <iostream> #include <cstdio> #include <cstring> #include < ...
- mysql 存储过程,以及mybatis如何调用
说道存储过程,很多人都知道,但是真正用的人其实很少,但是在某些必要的场景,是必须使用的,虽然可以使用java代码解决,但是效率性能远不及存储过程 曾经在sqlserver 以及pgadmin上用过,m ...
- Android Sdk 和ADT Eclipse安装配置步骤
由于我们之前下载的jdk版本是1.6的,所以后面的andriod sdk等版本需要相对应.安装文件我都放在云盘里面,需要的可以下载 一:如果单独安装每一个软件,先期需要下载的软件包如下: 1.JDK ...
- Android组件系列----Android Service组件深入解析
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- 第23章 SEH结构化异常处理(3)_终止处理程序
23.3 终止处理程序 23.3.1 程序的结构 (1)框架 __try{ //被保护的代码块 …… } __finally{ //终止处理 } (2)__try/__finally的特点 ①fina ...
- Cookie测试工具小汇
现在很多网站都用到Cookies,特别是用户的登陆以及购物网站的购物车. Cookies 通常用来存储用户信息和用户在某应用系统的操作,当一个用户使用Cookies 访问了某一个应用系统时,Web 服 ...
- hammer.js中文文档
转自:http://www.uedsc.com/hammerjs-api.html HammerJS是一个优秀的.轻量级的触屏设备手势库,现在已经更新到2.04版本,跟1.0版本有点天壤地别了,毕竟改 ...
- POJ 2406 Power Strings
F - Power Strings Time Limit:3000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u S ...