博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C-指针
阅读量:6701 次
发布时间:2019-06-25

本文共 2938 字,大约阅读时间需要 9 分钟。

//格式:变量类型 *变量名

//定义了一个指针变量p
//指针变量只能存储地址
//指针就一个作用:能够根据一个地址值,访问对应的存储空间
//指针变量p前面的int;指针变量p只能指向int类型的数据
int *p;

int a = 90;

//指针变量p指向了变量a

p = &a;

*p = 10;

a = 20;

printf("%d\n", *p);

//printf("%d\n", a);

return 0;

//利用指针修改

int main()
{
    int a = 90;

    change(&a);

    prinf ("%d\n", a);

    
    return 0;
}
void change(int *n)//int *n = &a;
{
    *n = 10;//将10赋给地址&a
}

 

格式: 变量类型  *变量名

定义一个指针变量p

int *p;

int a = 90;//分配存储空间给a

p里面只能存地址

p = &a;//指针变量p指向了变量a

以上三行代码在内存中

通过指针改变a 的值

*p = 10;

 

定义变量时的*仅仅是一个象征,没有其他特殊含义

 

利用指针求两个数的和与差

#include 
int main(){ int a = 10; int b = 7; int sum; int min; sum = sumAndMinus(a, b, &cha); printf ("和是%d, 差是%d\n", he, cha); return 0;}int sumAndMinus(int n1, int n2, int *n3){ *n3 = n1 - n2; return n1 + n2;//指针作用:使函数返回值可以有多个
}

 

任何指针都占用8个字节的存储空间

1 #include 
2 3 int main() 4 { 5 // 0000 0000 0000 0000 0000 0000 0000 0010 6 int i = 2; 7 // 0000 0001 8 char c = 1; 9 10 int *p;11 p = &c;12 13 printf("c的值是%d\n", *p);14 15 return 0;16 }17 /*输出:18 c的值是51319 */20 //使用 int *p 不是 1 而是 51321 //原因:int *p 取值赋值时 取赋4个字节内容22 // 而 char *p 取值赋值时 取赋一个字节内容23 //所以 指针都为8个字节存储空间,却定义指针类型的原因是,取值赋值相对应的类型的存储空间

 *p地址为(从大到小)0000 0000 0000 0000 0000 0010 0000 0001        int值为513

指针与数组:

1 #include 
2 3 int main() 4 { 5 int ages[5] = {
10, 9, 8, 67, 56}; 6 int *p; 7 8 p = &ages[0];//指针变量p指向了数组的首元素 9 //数组名就是数组的地址,也是数组首元素的地址10 //p = ages;11 //p + 1 的地址取决于指针p的类型 p为int p + 1 地址则增加 412 /*所以:13 p + 1 -> &ages[1]14 p + 2 -> &ages[2]15 p + i -> &ages[i]16 */17 /*18 用指针 遍历数组:19 for (int i = 0; i<5; i++)20 {21 printf("ages[%d] = %d\n", i, *(p+i));22 }23 */24 return 0;25 }

  

#include 
void change(int array[]);int main(){ int ages[5] = {
10, 11, 19, 78, 67}; change(&ages[2]); return 0;}void change(int *array){ printf("%d\n", array[2]);}//输出结果: 67

 

指针与字符串:

定义字符串的两种方式 1》利用数组

            char *name = "it";//字符串里面的字符是可以修改的

           2》利用指针

            char *name = "it";//字符串其实是常量字符串,字符不能改

             适用场合: 不需要修改且经常用到

1,常量区

2, 堆

    对象

3, 栈

    存放局部变量

   使用char name[] = "it";为字符创变量

   char *name = "it";为字符串常量//不能改变值

返回指针的函数

1 #include 
2 3 char *test(); 4 5 int main() 6 { 7 char *name = test();//将函数的返回值赋值给指针 8 9 printf("name=%s\n", name);10 11 return 0;12 }13 14 char *test()15 {16 return "rose";17 }

指向指针的函数:

  

1 #include 
2 3 void test() 4 { 5 printf("调用了test函数\n") 6 } 7 8 int main() 9 { /*10 (*p)是固定写法,代表指针变量p将来肯定是指向函数11 左边void :指针变量p指向的函数没有返回值12 右边():指针变量p指向的函数没有形参13 */14 void (*p)();15 16 p = test;//指针变量p指向了test函数17 18 (*p)();//利用指针变量简介调用函数19 20 test();//直接调用函数21 p();//简洁写法22 23 }

 

转载于:https://www.cnblogs.com/IDRI/p/4926267.html

你可能感兴趣的文章
R学习之——R用于文本挖掘(tm包)
查看>>
二维数组联通子数组和最大
查看>>
jsonArray与 jsonObject区别与js取值
查看>>
Bzoj 3289: Mato的文件管理 莫队,树状数组,逆序对,离散化,分块
查看>>
Bzoj 2662: [BeiJing wc2012]冻结 dijkstra,堆,分层图,最短路
查看>>
数据库设计思考
查看>>
linux实例 批量修改图片文件名
查看>>
day15(mysql 的多表查询,事务)
查看>>
将iphone中的照片同步到电脑
查看>>
IOS
查看>>
【自己给自己题目做】:如何在Canvas上实现魔方效果
查看>>
beta冲刺第三天
查看>>
beta第二天
查看>>
工作中常用的但是又容易忽略的问题
查看>>
css特殊情况
查看>>
NOIP2018滚粗记
查看>>
mysql 中 all any some 用法
查看>>
目前最细致清晰的NSDictionary以及NSMutableDictionary用法总结(转)
查看>>
后代选择器
查看>>
WebView性能优化--独立进程
查看>>