C语言--指针(一)

#import <Foundation/Foundation.h>
//交换函数
void swap(int x, int y)
{
    printf("x=%d,y=%d",x,y);
    int temp = 0;
    temp = x;
    x = y;
    y = temp;
    printf("x=%d,y=%d",x,y);

}

//
void swap2(int *x , int *y)
{
    //不改地址,改地址对应的值
    printf("x=%d,y=%d",*x,*y);
    int temp = 0;
    temp = *x;
    *x = *y;
    *y = temp;
    printf("x=%d,y=%d",*x,*y);
}

int main(int argc, const char * argv[])
{

    //C语言定义指针的时候,喜欢使用p,q,r等;
    //类型是int*
    //变量名p
    //初值NULL恒等于0
//    int *p = NULL;
//    //打印指针%p
//    printf("%p %lu\n",p,sizeof(p));
//
//    char *q = 0*1000;
//    printf("%p %lu\n ",q,sizeof(q));

#pragma mark---------指针总结
    //我们通常所说的指针,指的是指针变量,
    //指针变量是存放, 内存地址 (内存编号)的变量.

    //32位,8个0或1表示每8位一个字节
    //指针占用的内存都一样,指针变量占用的内存不一样

    //p和q所占内存一样,因为都是32或64位系统下的首地址,都占那么多,而int,char决定长度不一样,int占四间房,char就占1间房

    //取地址符,是知道int a = 3,a值是3, int *P想指向内存中a = 3,这时候有了取地址符&a,就是a的首地址,
//    int a = 3;
//    int *p = &a;
//    printf("p=%p\n",p);
//    printf("&a=%p\n",&a);
////    printf("%d",*p);
//
//    char b = 'a';
//    char *q = &b;
//    printf("%p %lu\n",q,sizeof(q));
    //整型等于整型地址,字符型等于字符型地址
    //没有谁是猜的地址,&取地址符,去整型,就是整型指针....

    //*p 取值符 地址里存放的内容
    //取多少字节取决于类型修饰符
//    printf("%d \n",*p);//*p 取值运算符  用于获取 指针对应的值
//    printf("%d %c\n",*p,*q);

    //获取地址两种途径
    //第一,直接给地址
    //第二,用取值符号&来取
#pragma mark-------------指针变量的赋值,代表指针变量的重指向
    //指针变量指向
    //指针变量的赋值,代表指针变量的重指向
    //注意
    //不要让整型指向字符型
    //也不要让字符型指向整型
//    p = &b;错误

//    int a = 10;
//    int *p = &a;
//    printf("指针p存放的地址: %p 指针p占用的内存空间大小:%lu 这个内存空间里存放的值: %d\n",p,sizeof(p),*p);
//    //p自己也占内存
//    //它们都放在栈区,一个一个分配内存
//    printf("p自己的地址: %p\n",&p);
//    int b = 20;
//    p = &b;
//    printf("指针p保存的新地址:%p 新的内存空间里存放的值 %d\n",p,*p);

#pragma mark-------------指针的算术运算
    //只有加减运算
    //int * p = &a;
    //P++;向高位移动四个字节
    //p--;向低位移动4个字节

    //p每加一代表加了这么大类型
    //p++//向高位移动四个字节
    //p+1//没有变
    //*(p++)
    //*(p+1)

    //int * p = &a;仅仅告诉编辑器 p是一个指针

    //*p = 20;操作符,取地址对应的值

    //p 指针(地址) *p取值 &p地址 &(*P)地址

#pragma mark-------------数组与指针
//    int arr[5]={9,2,3,4,5};
//    printf("%p\n",arr);
//    printf("%p\n",&arr[0]);
//    int *p = arr;
//    printf("%d\n",*p);
//    printf("%d\n",*(p+1));
//    printf("---%d\n",p[1]);
//    arr[1]=8;//直接改值
//    *(p+1)=7;//间接改值
//    printf("%d\n",*(p+1));
#pragma mark-------------数组去*号加[]原则,把数字扩出来
//    printf("%d\n",*(p+1));
//    printf("%d\n",p[1]);

    //p[2] *(p+2) arr[2]
//    p=arr+3;//指针变量是变量,可以重指向(赋值)
    //arr = p;数组名是一个常量指针,不可以改变赋值.

    //通过数组元素求数组元素个数,sizeof(a)/4

//    short a[4]={3,7,9,1};
//    int  *p1 = a;
//    char *p2 = a;
//    printf("%d",*p1);
//    printf("%d",*p2);

#pragma mark-------------字符串与指针
    //可以操作单个字符,     *(p+2)='z';
    //也可以操作整个字符串   printf("%s",(p+2));
//    char str[]="iPhone";
//    char* p = str;
//    *(p+2)='z';
//    printf("%s",(p+2));
#pragma mark-------------指针数组
    //存放指针的数组是指针数组
    //常量区
    //栈区.拷贝常量区

//    char *p1 = "iPhone";
//    char *p2 = "Android";
//    char *p3 = "win8";
//    char *strings[3]={p1,p2,p3};

    // char *strings[3]={"iphone","Android","win8"};
    //操作整个字符串
    //打印指针数组(指针字符串)
//    for (int i = 0; i<3; i++) {
//        printf("%s ",strings[i]);
//    }
//    printf("%s,%s,%s",strings[0],strings[1],strings[2]);
    //操作单个字符串
//    *(strings[1]+4) = 'x';//指向常量,不能赋值
//    char c = *(strings[1]+4);
//    printf("\n %c",*(strings[1]+4));
//    printf("\n %c",strings[1][4]);
    //

#pragma mark-------------指针与函数
    //改变不了值,因为是你压根没有改变a,b,而是改变它的副本x,y
    int a = 10,b = 20;
//    swap(a, b);
//    printf("%d,%d",a,b);
//    int *p = &a;
//    int *q = &b;
//    swap2(p, q);
    //不改地址,改地址对应的值
    swap2(&a, &b);
    printf("a=%d,b=%d",a,b);
    //学好指针,需要多画图

    return 0;
}

C语言--指针(一),布布扣,bubuko.com

时间: 2024-10-25 13:46:23

C语言--指针(一)的相关文章

C语言指针

C语言指针 指针是什么? 指针也是一个变量,但是这个变量存储的是一个地址,指向一个存储单元.我们可以根据指针(地址)找到他所指的变量,并对这个变量进行操作(赋值等).通过C里面的取地址符号&和取所指内容的符号*可以很方便的表示指针以及指针所指的变量之间的关系 /* ============================================================================ Name C语言指针 : text.c Author : Version : C

C语言指针讲解

指针是C语言的一种数据类型,类似于C中的其他类型,例如int ,char 等.既然指针是一种类型,当我们定义该类型变量,该类型变量就称为指针变量. C中有了指针就有了指向.指向:指针变量指向本身保存的内容(地址或指针)所表示的内存单元. C语言指针是一个特殊的变量,其里面储存的数值被解释成为内存里的一个地址. 在计算机中,所有对数据的操作,都是通过其地址进行的,指针让程序的效率更高,代码更少. 在学习指针的时间,一定要理解并区分指针的四个感念:指针的类型,指针所指向的类型,指针的值,指针本身所占

[转]C 语言指针的使用

第一章 指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区.让 我们分别说明. 先声明几个指针放着做例子: 例一: (1)int *ptr; (2)char *ptr; (3)int **ptr; (4)int (*ptr)[3]; (5)int *(*ptr)[4]; 如果看不懂后几个例子的话,请参阅我前段时间贴出的文?lt;<如何

C语言指针的陷阱

C语言指针的陷阱   分类: C/Cpp 转自:http://blog.csdn.net/porscheyin/article/details/3461670 "C语言诡异离奇,陷阱重重,却获得了巨大成功!"--C语言之父Dennis M.Ritchie.Ritchie大师的这句话体现了C语言的灵活性以及广泛的使用,但也揭示了C是一种在应用时要时刻注意自己行为的语言.C的设计哲学还是那句话:使用C的程序员应该知道自己在干什么.有时用C写的程序会出一些莫名其妙的错误,看似根源难寻,但仔细

C语言指针占用字节

指针即为地址,存的是变量的地址,在同一架构下地址长度都是相同的(cpu的最大寻址内存空间),所以不同类型的指针长度都一样. 指针占用几个字节跟语言无关,而是跟系统的寻址能力有关,16为地址指针即为2个字节,32位系统是4个字节,64位系统为8个字节. 用sizeof求长度: #include<stdio.h> void main(void) { printf("%d %d %d\n",sizeof(int),sizeof(double),sizeof(char)); } 在

关于c语言 指针课堂随笔

右左法则:首先从最里面的圆括号看起,然后往右看,再往左看.每当遇到圆括号时,就应该掉转阅读方向.一旦解析完圆括号里面所有的东西,就跳出圆括号.重复这个过程直到整个声明解析完毕 1.指针的判断应该是从未定义的标识符开始阅读,而不是从括号读起,之所以是未定义的标识符,是因为一个声明里面可能有多个标识符,但未定义的标识符只会有一个 实例: int(*func)(int*p)    先从标识符func找起往右走  碰到圆括号 反转 从左走 func的指针  再往右碰到圆括号这是个函数    func是指

c语言指针学习

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

C语言指针,你还觉得难吗?

在研究式学习-c语言程序设计指针式这样介绍的: 内存中存储变量的第一个单元的地址 称为指针,存放指针的变量称为指针变量: 变量的访问方式有: 直接访问方式:按变量名查找其首地址 间接访问方式:通过指针访问 int swap(int p,int q){ int temp; temp=p; p=q; q=temp;} 现在理解了这个函数为什么要用指针了: 因为C语言中实参变量和形参变量之间的数据传递是单向的值传递方式,虽然运用指针被调函数不能改变实参指针变量的值,但可以改变实参指针变量指向的变量的值

C语言指针解说

指针是C语言的一种数据类型.类似于C中的其它类型,比如int ,char 等.既然指针是一种类型,当我们定义该类型变量.该类型变量就称为指针变量. C中有了指针就有了指向. 指向:指针变量指向本身保存的内容(地址或指针)所表示的内存单元. C语言指针是一个特殊的变量.其里面储存的数值被解释成为内存里的一个地址. 在计算机中,全部对数据的操作,都是通过其地址进行的.指针让程序的效率更高,代码更少. 在学习指针的时间,一定要理解并区分指针的四个感念:指针的类型,指针所指向的类型,指针的值,指针本身所