栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言---->指针

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言---->指针

什么是指针

指针 = 地址
指针变量
1.存放指针的变量
2.存放地址的变量

*(&hello);  // 此时 " * "代表的是一个运算符,跟+ - / * 运算符类似,
		      //该运算符的功能是取出内存地址中的数据的值(取内容)。

**int a =10 ; &a(0x660cffc0)**

” * “ 只有在定义一个指针变量的时候,才是指针的一个标识符 ,在其他情况下,都是一个取内容的运算符

为什么用指针
  1. 指哪打哪——指定内存位置,给它赋值
  2. 经典数据交换——参数传递要用地址

c语言的指针可以做到把a(10)数据 强制保持在我要的地址 0060ff00 (在ARM架构 裸机编程 ARM 驱动)volatile int *p = (volatile int *)0x0060ff00; //强制保持在我要的地址0060ff00

指针重点

1.变量访问的两种方式:
a.变量名 b.指针

2.指针
a.指向谁(类型)p=&a
b.偏移后指向谁 p++

3.整型指针只能指向整型数据,只能存放整型地址

指针变量必须初始化一个有效值才能使用

数组指针

指向数组的指针

指针数组

int *parray[3];
//多个指针,叫做指针数组
//数组中的每一项都是一个指针变量 指针变量是存放地址的变量

函数指针 ----> 指向函数的指针

void(*p)();
数据类型 (*函数指针名)();

void printWelcome()
{
        printf("欢迎来到函数指针学习课堂n");
}
int main(){
	void (*p)();
	p = printWelcome;   //函数就是地址 ,就像数组一样,数组名就是地址
	p();                //直接通过 名字( );
	(*p)( );            //取内容(*指针名字) ( )
}

函数返回值为指针

#include
int s;
int * sum(int x, int y);
int main(){
	int * r = sum(10, 9);
	printf("10 + 9 = %dn", *r);
	return 0;
}
int * sum(int x, int y){
	s = x + y;
	return &s;
}

函数参数为指针

void swap(int *x, int *y);
void main(){
	int x = 20, y = 10;
	swap(&x, &y);
	printf("x = %d, y = %d", x ,y);
}
void swap(int *x, int *y){
	int t;
	t = *x;
	*x = *y;
	*y = t;
}

结构体定义指针-错误用法

#include
struct Datas
{
	char *p; 
	//char p = [128];  正确用法
};

int main(){
	struct Datas d;
	strcpy(d.p , "你今天真好看")
	printf("%sn",d.p);
}
#include
struct Datas
{
	char *p;
};

int main(){
	struct Datas d;
	d.p=(char *)malloc(128);
	memset(d.p , '',128);

	strcpy(d.p,"你今天真好看");
	printf("%sn",d.p);
}
#include
//初始化结构体数组
struct Student
{
   int score;
   char *name[128];
};

int main()
{
	struct Student *p ;   //野指针
	struct Student stu1;
	p=(struct *)malloc(sizeof(struct Student))  
	//  若不用该空间应该释放掉:
	//   free(p);
	p.score = 100;     //会报错,如果用结构体指针,就不能用点运算符
	p->score = 100;    //如果用结构体指针,访问结构体中的变量 要用->
	strcpy(p->name,"李四");
	printf("名字:%s,分数:%dn",p->name , stu1->score);
//指针是存放地址的变量,之前是指向malloc的那块空间,现在指针变量存放的是stu1的地址
	p=&stu1;
	p++;   //在内存里是偏移了整个结构体大小
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1025791.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号