Java培训、Android培训、iOS培训、.Net培训、期待与您交流!

(以下内容是对黑马苹果入学视频的个人知识点总结)

(一)指针

首先指针是C语言中非常重要的数据类型,如果你说C语言中除了指针,其他你都学得很好,那你干脆说没学过C语言。

1)指针变量的定义

1>定义的格式

类名标识符  *指针变量名;

int *p;

指针需要先定义然后再赋值

简单取值

int a = 10;

int *p;

p = &a;

简单改值

*p = 9;

定义的时候赋值

int a = 10;

int *p = &a;

指针变量都占用8个字节的存储空间,它存储的时数据的地址

2>指针可以实现修改实参

不能交换外面实参的值,仅仅是交换了内部指针的指向

3>指针可以清空

p=NULL;清空后的指针是不能再间接访问其他存储空间

 #include <stdio.h>

 int main()
{
/* 不建议的写法, int *p只能指向int类型的数据
int *p;
double d = 10.0;
p = &d;*/ /* 指针变量只能存储地址
int *p;
p = 200;
*/ /* 指针变量未经过初始化,不要拿来间接访问其他存储空间
int *p;
printf("%d\n", *p);
*/ int a = ;
/*
int a;
a = 10;
*/ /*
int *p;
p = &a;
*/
// 定义变量时的*仅仅是一个象征,没有其他特殊含义
int *p = &a; // 不正确的写法
// *p = &a;
p = &a; // 这个时候的*的作用:访问指向变量p指向的存储空间
*p = ; char c = 'A'; char *cp = &c; *cp = 'D'; printf("%c\n", c); return ;
}

(二)指针与数组

可以定义指向一维数组的指针,可以使用指针遍历数组的元素

 #include <stdio.h>

 /*
1.数组元素的访问方式
int ages[5];
int *p;
p = ages;
1> 数组名[下标] ages[i]
2> 指针变量名[下标] p[i]
3> *(p + i) 2.指针变量+1,地址值究竟加多少,取决于指针的类型
int * 4
char * 1
double * 8
*/
void change(int array[]); int main()
{
// 20个字节
int ages[] = {, , , , }; change(ages); return ;
} // 利用一个指针来接收一个数组,指针变量array指向了数组的首元素
void change(int *array)
{
printf("%d\n", array[]);
//printf("%d\n", *(array+2));
} /*
void change(int array[])
{
int s = sizeof(array); printf("%d\n", s);
}*/ void test()
{
double d = 10.8;
double *dp;
dp = &d; printf("dp = %p\n", dp);
printf("dp + 1 = %p\n", dp + ); int ages[] = {, , , , }; int *p;
// 指针变量p指向了数组的首元素
p = &ages[];
// 数组名就是数组的地址,也是数组首元素的地址
//p = ages; /*
p ---> &ages[0]
p + 1 ---> &ages[1]
p + 2 ---> &ages[2]
p + i ---> &ages[i]
*/ //printf("%d\n", *(p+2)); printf("%d\n", p[]); /*
for (int i = 0; i<5; i++) {
printf("ages[%d] = %d\n", i, *(p+i));
}*/ // printf("%p\n", p);
// printf("%p\n", p + 1);
// printf("%p\n", p + 2);
}

(三)指针与字符串

定义字符串的2种方式

1> 利用数组

char name[] = "itcast";

* 特点:字符串里面的字符是可以修改的

* 使用场合:字符串的内容需要经常修改

2> 利用指针

char *name = "itcast";

* 特点:字符串其实是一个常量字符串,里面的字符是不能修改

* 使用场合:字符串的内容不需要修改,而且这个字符串经常使用

 #include <stdio.h>

 int main()
{
char name[]; printf("请输入姓名:\n"); scanf("%s", name); // 'j' 'a' 'c' 'k' '\0' //printf("%c\n", name[3]); //printf("刚才输入的字符串是:%s\n", name); return ;
} // 定义字符串数组
void test2()
{
char *name = "jack"; //int ages[5]; // 指针数组(字符串数组)
char *names[] = {"jack", "rose", "jake"}; // 二维字符数组(字符串数组)
char names2[][] = {"jack", "rose"};
} // 定义字符串
void test()
{
// 字符串变量
char name[] = "it";
name[] = 'T'; //printf("%s\n", name); // "it" == 'i' + 't' + '\0'
// 指针变量name2指向了字符串的首字符 // 字符串常量
char *name2 = "it"; char *name3 = "it"; //*name2 = 'T'; //printf("%c\n", *name2); printf("%p\n%p\n", name2, name3); //printf("%s\n", name2);
}

(四)指向函数的指针

指向函数的指针的定义

定义的一般形式:数的返回值类型 (*指针变量名)(形参1, 形参2, ...);

double (*p)(double, char *, int);

p = haha;或者 double (*p)(double, char *, int) = haha;

3.如何间接调用函数

1> p(10.7, "jack", 10);

2> (*p)(10.7, "jack", 10);

1>由于这类指针变量存储的是一个函数的入口地址,所以对它们作加减运算(比如p++)是无意义的

2>指向函数的指针只要有两个用途:

①调用函数

②将函数作为参数在函数间传送

黑马程序员——C语言基础 指针的更多相关文章

  1. 黑马程序员——C语言基础语法 关键字 标识符 注释 数据及数据类型

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)C语言简单介绍 (1)C语言程序是由函数组成的任何C语言程序都是由一 ...

  2. 黑马程序员——OC语言基础语法 面向对象的思想

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结)(一)基础语法 1)关键字 @interface.@implementati ...

  3. 黑马程序员——C语言基础 枚举 宏定义 自定义 static exterm

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)枚举 1)枚举类型的定义 枚举是C语言中的一种基本数据类型,并不是构 ...

  4. 黑马程序员——C语言基础 函数

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)函数的定义 1> 任何一个C语言程序都是由一个或者多个程序段( ...

  5. 黑马程序员——C语言基础 char字符 数组

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)char类型 1)存储细节 ASCII单字节表(双字节GBK\GB2 ...

  6. 黑马程序员——C语言基础 scanf函数 基本运算 三目运算符

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)scanf函数 1>  简单介绍一下scanf函数   这是在 ...

  7. 黑马程序员——C语言基础 变量类型 结构体

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)变量类型 1)局部变量 1> 定义:在函数内部定义的变量,称为 ...

  8. 黑马程序员——C语言基础 流程控制 选择结构和循环结构

    ---恢复内容开始--- Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)流程控制 1> 顺序结构:默认的流程 ...

  9. 黑马程序员——C语言基础 字符串

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)字符串 1>字符串是由多个字符组合在一起形成的 2>初始 ...

随机推荐

  1. JavaScript中的防篡改对象

    由于JavaScript共享的特性,任何对象都可以被放在同一环境下运行的代码修改. 例如: var person = {name:"caibin'} person.age = 21; 即使第 ...

  2. WinForm中MouseEnter和MouseLeave混乱的问题

    MouseEnter+MouseLeave不行,我用了MouseMove+MouseLeave,效果一样 最近做个聊天的系统,仿照qq的界面设计,像qq聊天界面中字体.表情.截图等图片,鼠标放上去显示 ...

  3. 7 -- Spring的基本用法 -- 4...

    7.4 使用 Spring 容器 Spring 有两个核心接口:BeanFactory 和 ApplicationContext,其中ApplicationContext 是 BeanFactory ...

  4. 关于启用 HTTPS 的一些经验分享(二)

    转载: 关于启用 HTTPS 的一些经验分享(二) 几天前,一位朋友问我:都说推荐用 Qualys SSL Labs 这个工具测试 SSL 安全性,为什么有些安全实力很强的大厂家评分也很低?我认为这个 ...

  5. RapidJson读取json文档

    Json格式定义如下 Object: { _Name:_Data,... } 最后一项后面没有逗号 Array: [_Data,_Data,...] 最后一项后面没有逗号 _Name: String ...

  6. js数组倒叙输出

    第一种:是直接利用代码进行输出 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...

  7. Mybatis + Mysql 插入数据时中文乱码问题

    近日跟朋友一起建立一个项目,用的是spring+mybatis+mysql. 今天碰到一个mybatis向mysql中插入数据时,中文显示为'???'的问题,拿出来说下. 对于数据库操作中出现的中文乱 ...

  8. diskpart查看硬盘序列号

    WIN + R键运行cmd,进如DOS界面: 1. systeminfo查看OS初始安装时间 2. diskpart工具查看硬盘序列号 (1)diskpart (2)lisk disk 查看主机安装的 ...

  9. Right Here Waiting

    俺不会和小时候一样,因为别人听,自己就不听了^^

  10. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'

    1.查看一下mysql的状态 systemctl status mariadb 2.启动mysql systemctl start mariadb