C语言指针{学习笔记}

按变量地址存取变量值的方式称为直接访问方式;

定义特殊变量用来存放地址,i_pointer的值就是变量i所占用单元的起始地址;存取变量i的值。则要找到存放i的地址的变量,取出地址,然后到地址去取值;

i_pointer=&i;

一个变量的地址称为该变量的指针;

如果有一个变量专门用来存放另一变量的地址(指针),称为指针变量;

区别:指针是一个地址,而指针变量是存放地址的变量;

定义指针变量: 如: int *pointer_1;  //int是定义指针变量时必须制定的基类型,指针变量的基类型用来指定该指针变量可以指向的变量的类型;

定义指针变量的一般形式为:  基类型  *指针变量名;

函数的参数也可以是指针类型,将一个变量的地址传送到另一个函数中;

以变量名和数组名作为函数参数的比较:

1.如果形参的类型为变量名,传递的是变量的值,不能通过函数调用改变实参的值

2.如果形参的类型为数组名或指针变量,传递的是实参数组首元素的地址,能通过函数调用改变实参的值;

指针变量做实参,必须先使指针变量有确定值,指向一个已定义的单元;

用数组名作参数时,如果形参数组中各元素的值发生变化,实参数组元素的值随之变化;

如果实参是数组名(即代表该数组首元素的地址),形参则需要定义指针变量(只有指针变量才能存放地址),常用这种方法通过调用一个函数来改变实参数组的值;

实参数组名代表一个固定的地址,或者说是指针常量,但形参数组并不是固定的地址值,而是作为指针变量,在函数调用开始时,它的值等于实参数组首元素的地址,在函数执行期间,它可以再被赋值;

归纳:

如果有一个实参数组,要想再函数中改变此数组中的元素的值,实参与形参对应的关系有以下4种情况:

a、形参和实参都用数组名

//数组名做形参和实参;

#include<studio.h>

void main()

{

void inv(int x[],int n);

int i,a[10]={3,7,9,11,0,6,7,5,4,2};

printf("the original array:\n");

for (int i = 0; i < 10;i++)

{

/* code */printf("%d\n",a[i] );

printf("\n");

}

inv(a,10);

printf("the array has been inverted:\n");

for (int i = 0; i <10; ++i)

{

/* code */printf("%d\n",a[i]);

printf("\n");

}

}

void inv(int x[],int n)

{

int temp,i,j,m=(n-1)/2;

for (int i = 0; i <= m; i++)

{

/* code */j=n-1-i;

temp=x[i];

x[i]=x[j];

x[j]=temp;

}

return;

}

b、实参用数组名,形参用指针变量

//指针变量做形参,数组名作实参;

#include <studio.h>

void main()

{

void inv(int *x,int n);

int i,a[10]={3,7,9,11,0,6,7,5,4,2};

printf("the original arrag:\n");

for (int i = 0; i < 10; i++)

{

/* code */printf("%d\n",a[i] );

printf("\n");

}

inv(a,10);

printf("the array has been inverted:\n");

for (int i = 0; i < 10; i++)

{

/* code */printf("%d\n",a[i]);

printf("\n");

}

}

void inv(int *x,int n)

{

int *p,temp,*i,*j,m=(n-1)/2;

i=x;j=x+n-1;p=x+m;

for (; i <=p; i++,j--)

{

/* code */temp=*i;

*i=*j;

*j=temp;

}

return ;

}

c、实参形参都用指针变量

//指针变量做实参和形参

#include<studio.h>

void main()

{

void inv(int *x,int n);

int i,arr[10];

int *p=arr;

printf("the original array:\n");

for (int i = 0; i < 10;p++)

{

scanf("%d",p);

printf("\n");

}

p=arr;

inv(p,10);

printf("the array has been inverted:\n");

for (int p=arr; p<arr+10; p++)

{

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

printf("\n");

}

}

void inv(int *x,int n)

{

int *p,temp,*i,*j,m=(n-1)/2;

i=x;j=x+n-1;p=x+m;

for (; i <= p; i++;j--)

{

/* code */j=n-1-i;

temp=*i;

*i=*j;

*j=temp;

}

return;

}

d、实参为指针变量,形参为数组名

时间: 2024-08-12 14:00:12

C语言指针{学习笔记}的相关文章

初探swift语言的学习笔记十(block)

作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/35783341 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢! 在前面一些学习中,原本把闭包给理解成了block尽管有很多相似之处,但block还是有他自己的独特之外.近日,在写oc/swift混合编码时,有时候需要swift回调oc,oc回调swift . 因此我把swift中的 block 常见的声明和写

初探swift语言的学习笔记(可选类型?和隐式可选类型!)

可选类型.隐式可选类型 其次swift还引入一个较有趣的初始值设置语法使用"?"操作符及"!"号操作符 如:"var optionalString: String? = "Hello" optionalString == nil var optionalName: String? = "John Appleseed" var greeting = "Hello!" if let name = op

C语言基础学习笔记

--C语言框架-- 数据  字节byte          字符   char         8  半字half word     短整型        short int    16    字word            整型   int(integer)   32               长整型   long int     32                 单精度   float        32   双字(double word) 双精度  double       64 

初探swift语言的学习笔记十一(performSelector)

作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/35842441 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢! 在OC中使用好好的performSelector,但不知为什么在swift有意的被拿掉了.更有甚者连IMP, objc_msgSend也不能用了.虽然想不通为什么,但应该有他的道理.就不纠结了. 大家可能在OC中使用得更多的就是延时处理,及后台处

C和指针 学习笔记-4.函数

参数传递: 参数传递采用按值传递 ADT&黑盒 ADT:abstract data type,抽象数据类型 c可以用于设计与实现抽象数据类型,因为它可以限制函数和数据定义的作用域,这种技巧也称为黑盒设计 user.h #define MAXLEN 3 struct UserClz { char *name; char *phone; char *address; }; typedef struct UserClz User; /* *接函数 *通地名称查找地址 */ char const * l

C和指针 学习笔记-3.数组与指针

数据名代表首地址 指向数组的指针 #include <stdio.h> extern void iterate(int *p); void main(){ int a[]={1,2,3,4,5}; iterate(a); } void iterate(int *p){ int i; for(i=0;i<5;i++){ printf("%d",*p++); } } 指向一维数组的指针 int (*p)[3] #include <stdio.h> void i

c语言指针学习

前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水,食品,你能告诉还有没有问题的吗?不知大难至,世人依旧忙.祸福相依,危中有机.那些高级生命,出于慈悲,会救渡我们,但是你要去思考,去发现机缘. 最近较闲,没事就学点基础知识,整天在上层晃,感觉晕的厉害,接地气.关于指针我上学的时候学过一点,我的老师说"指针很难呢",当时以为这老师挺谦虚的.后

数组与指针学习笔记

1.数组初始化说明 (1).在函数体外定义的内置数组,其元素均被初始化为0: (2).在函数体内定义的内置数组,其元素无初始化: (3).类类型的数组自动调用默认构造函数进行初始化,如果无默认构造函数,则必须为该素族元素提供显示初始化. 2.指针的定义 double *p_dbData1, p_dbData2; p_dbData1为指向double类型的指针,p_dbData2为类型为double的对象,若两个变量都定义为double指针,则如下所示: double *p_dbData1,  *

初探swift语言的学习笔记四(类对象,函数)

作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/29606137 转载请注明出处 假设认为文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢! swift扩展了非常多功能和属性,有些也比較奇P.仅仅有慢慢学习,通过经验慢慢总结了. 以下将初步学习一下类的写法. 码工,最大爱好就是看码,而不是文字,太枯燥. // // computer.swift // swiftDemo // // C