c语言学习-指针探究

1:指针定义格式:
格式:变量类型 *变量名用途:指针变量用于储存地址(only),也就是根据地址值,访问对应的存储空间。

注意。int *p 只能指向int类型的数据;

 例: 
int a = 20;
int *p;
p = &a;
//既p代表地址,*p代表值
//这时的* 代表指针变量p指向的存储空间,目的:改变p代表的地址指向的空间。

任何指针类型,都是占用8字节的存储空间。

指针的长度,是要根据指向的数据的地址,来取多少长度的数据,所以为防止取错数据需要和指向数据的类型一致。

注意:指针+1:p+1-->调到下一个地址,并非数学意义上的+1 具体取决于定义的类型,如:  int:+4,char:+1,double:+8;

指针数组:
int age[5]
int *p;
p = age;

数组赋给指针,可指针也具有数组的特性
p[i],

下面的上下情况一样的,
void change(int *array){ }

void changge(int array[]){ }

利用指针接收一个数组,指针变量arry指向数组的首元素。

3:指针与字符串

char name[] = "it";

char *name2 = "it"; //name2指向字符串的首字符,
由于其是char类型的数据,则只能指向第一个char类型。

printf("%c\n",*name2);
    -->i
指针name2就是代表了字符串的首字符
printf("%s\n",name2);
    -->it
而输出格式%s代表着,他会一致从第一个地址开始输出,知道遇到\0结束。
知道了指针的基本用法后,定义字符串的就有两种方式:
char name[] = "it";

char *name2 = "it"; 

name[1]=‘A‘;-->OK

*name=‘A‘,-->出错。

原因:指针定义的字符串,不可更改,

区别:数组:字符串变量(可更改)

     指针:字符串常量(不可更改)

char *n1="it";
char *n2="it";

printf("%p\n%p\n",n1,n2);//查看%p查看地址
二者的结果是一样的。指向同一个地址

**指针数组与指针字符串的区别

char name[]="itcast";

  特点:在变量区,内容可以更改

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

 指针字符串

char *name="itcast";

特点:这个字符串其实是常量字符串(在内存的常量区),里面的字符是不可更改。

使用场合,字符串的内存需要不需要修改,而且是经常用到。                    

3:指针数组 
char *name[5]={"jack","rose","jael"};
等价与二维字符串数组(字符串数组)
char name[3][5]={"jack","rose","jael"};

4:指向函数的指针 

  指针用来指向地址,而函数也有地址,指针也可以用来指

  我们知道数组名,代表数组的地址 ,同样,函数名代表函数地址。 

//无返回值,无参
void test(){ }
//带返回值
int sum(int a,int b){
return a+b;
}
//带返回值,同事参数也有指针格式
double min(double a,char *s,int a){}

int main(){

//1,使用void
//(*p):固定格式
//左边的void:指针变量p指向的函数没有返回值
//右边的():代表p指向的函数没有形参

void (*p)();

p = test;//指针变量p指向test

(*p)()://调用test函数,
或者p();

//2,带返回值int类型
int (*p)(int a,int b)//int (*p)(int,int)
p = sum;
int c = p(4,5);

return 0;
}

//3,double格式
double (*p)(double,char *,int);
p=min;
//或者
double (*p)(double,char *,int)=min;

作者:Darren

微博:@IT_攻城师

github:@Darren90

出处:http://www.cnblogs.com/fengtengfei/

时间: 2024-11-14 22:21:05

c语言学习-指针探究的相关文章

C语言学习——指针

指针 在学习指针之前,首先应该了解一些东西: 内存是什么? 从硬件形态上说,内存就是一条形物理设备,从功能上讲,内存是一个数据仓库,程序内在执行前都要被装载到内存中,才能被中央处理器执行.内存是由按顺序编号的一系列存储单元组成的,在内存中,每个存储单元都由唯一的地址,通过地址可以方便地在内存单元中存储信息.在计算机中,一切信息都是以二进制数据的形式体现的,每个内存单元的容量是1B,即8bit(8个0.1二进制位). 1.取地址运算符&, 间接运算符* &运算符:  取地址运算符,&

go语言学习--指针数组和数组指针

数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长.也就是说执行p+1时,p要跨过n个整型数据的长度. 如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组.p=a;        //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]p++;       //该语句执行过后,也就是p=p+1;

C语言学习指针补充

int *p = a; *p++ 先取指针p指向的值(数组第一个元素1),再将指针p自增1: cout << *p++; // 结果为 1 cout <<(*p++); // 1 (*p)++ 先去指针p指向的值(数组第一个元素1),再将该值自增1(数组第一个元素变为2 cout << (*p)++; // 1 cout <<((*p)++) //2*++p 先将指针p自增1(此时指向数组第二个元素),* 操作再取出该值 cout << *++p

黑 马 程 序 员_视频学习总结&lt;c语言&gt;----03 指针

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 一.什么是指针? 用来存放变量地址的变量,就称为"指针变量". 二.指针的定义 一般形式:类名标识符  *指针变量名; int *p; float *q; "*"是一个说明符,用来说明这个变量是个指针变量,是不能省略的,但它不属于变量名的一部分 前面的类型标识符表示指针变量所指向的变量的类型,而且只能指向这种类型的

黑马程序员——c语言学习心得—— 指针

黑马程序员——c语言学习心得—— 指针 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,打开文件fopen(文件名,打开方式);例如:FILE *fp = fopen("a1","r");  返回的是文件的指针(文件在内存缓冲区的首地址)fopen函数反回值 是指向 a1文件的指针,通常赋值给一个指针变量关于文件名a1 也可以是一个“路径+文件名”   c:\abc.txt----------------

【C语言学习】指针再学习(二)之数组的指针

★一维数组 一个整型数据为4个字节.4个字节就是32位,即可以表示2^32个数字 在程序中定义一个数组a[5] = {1,2,3,4,5}; 那么a[0]的地址就是0x00000000,数组名a是数组首元素的地址,a的地址也是0x00000000.a+1则表示的地址是0x00000004,而不是0x00000001.因为1这个值,根据前面的指针a所指向的类型的长度来调整自己的长度.也就是说如果a是指向整型的指针,那么后面加的1也表示4个字节,如果a是指向字符型的指针,那么后面加的1表示1个字节.

C语言学习之路——指针初探

进来学习C语言碰到了指针,着实学了一段时间,搞不出个头绪,今日感觉有些眉目,来此做个记录,也望能给困顿的人一起分享下感悟. 学习指针还要从变量,数组,函数的定义这些基础说起. 如:int a=10; int a[]={1,2,3,4}; int max (int x,int y) { .... } 学习C语言指针我想指针变量的定义就不用说了吧. 先上一个例子然后再给大家一一展开进行讲述. #include<stdio.h>int main(){int a;scanf("%d"

【C语言学习】指针再理解(一)

★内存和地址 内存的基本单位是字节,那么内存就可以按字节进行编址,就是给组成内存的所有连续的字节安排地址.其中一个最恰当的比喻就是房子与门牌号,假设有20间连续的房子,从最左边(或者左右边)开始分配门牌号1~20,给内存中字节分配的地址就相当于门牌号,字节就相当于房间.字节的容量只能存储一个字符.那么,内存是如何存储比字符更大的数据呢,比如:整型数据.浮点型数据? ★更大的内存单元 为了存储更大的数据,就会把两个字节或者跟多的字节合在一起组成更大的内存单元.比如内存可以以"字"为单位来

C语言学习_数组与指针2

数组其实是一种变相的指针,数组名同时也是指针,eg: CODE == &CODE[0]; 数组的加法: #include<stdio.h> #define SIZE 4 int main(void) { shortdates[SIZE]; short* pti; shortindex; doublebills[SIZE]; double* ptf; pti= dates;//把数组地址付给指针 ptf= bills; printf("%23s  %10s\n", &