指针基本操作

//
//  main.c
//  指针基本操作
//
//  Created by zhangxueming on 15/6/3.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#include <stdio.h>
//地址:
//变量定义在内存中, 也有自己的地址
//int a;
//通过&获取变量在内存中的位置

//int main(int argc, const char * argv[]) {
//    int a=100;
//    printf("%p\n", &a);
//    return 0;
//}

//指针变量: 保存变量内存地址的工具
//本质是变量,保存其它变量的地址
//int *p = &a;
//数据类型(指针指向变量的数据类型) + *(指针变量说明符) + 变量名;

//int * 是指针变量的类型

//int main(int argc, const char *argv[])
//{
//    int a=100;
//    int *p = &a;
//    printf("%p\n", &a);
//    printf("%p\n", p);
//
//    //指针变量也有自己地址
//    printf("%p\n", &p);
//
//    return 0;
//}

//间接寻址 *
//通过变量的地址寻址到对应地址的变量空间
//* & 是一对互逆运算符

//int main(int argc,const char *argv[])
//{
//    int a=100;
//    int *p = &a;
//
//    printf("%p\n", &a);
//
//    printf("a= %d\n", *p);
//    printf("a = %d\n", *&a);
//    printf("a = %d\n", a);
//
//    return 0;
//}

//指针变量的大小
//只跟平台有关, 32位平台占4字节 64位平台占8字节

//int main(int argc,const char *argv[])
//{
//    printf("size = %lu\n", sizeof(char *));
//    printf("size = %lu\n", sizeof(int *));
//    printf("size = %lu\n", sizeof(long *));
//    printf("size = %lu\n", sizeof(double *));
//    return 0;
//}

//int main(int argc, const char *argv[])
//{
//    int a=100;
//    int *p= &a;
//    int *q= p;//指针变量可以直接给指针变量赋值
//
//    *p = 200;
//    printf("a = %d\n", *q);
//    *q = 300;
//    printf("a = %d\n", *p);
//
//    return 0;
//}

//泛型指针
//void *

//int main(int argc, const char *argv[])
//{
//    int a=100;
//    long b = 200;
//    float f=3.14;
//
//    void *p = &a;
//    printf("a = %d\n", *(int *)p);
//    p = &b;
//    printf("b = %ld\n", *(long *)p);
//    p = &f;
//    printf("f = %f\n", *(float *)p);
//
//    return 0;
//}

//空指针
//NULL
//#define NULL  ((void *)0)

//野指针
//1. 定义了指针变量后没有给初值
//2. 指针变量指向的内存空间被释放
#include <stdlib.h>

//int main(int argc,const char *argv[])
//{
//    char *p=NULL;
//    //1.申请内存
//    p = (char *)malloc(100);
//    //2.判断内存是否申请成功
//    if(!p)
//    {
//        return -1;
//    }
//    //3.使用内存
//    scanf("%s", p);
//    printf("%s\n", p);
//    //4.释放内存
//    free(p);
//    //5.
//    p = NULL;
//
//    return 0;
//}

// 0 ‘\0‘ ‘\n‘ NULL "0" "\0" ‘ ‘
//
//int main(int argc, const char *argv[])
//{
//    printf("%d", ‘\n‘);
//    return 0;
//}

//指针运算

//++ --
//指针变量改变的长度为指针指向的数据类型的长度

//int main(int argc,const char *argv[])
//{
//    int a[10]={1,2,3,4,5,6,7,8,9,10};// a[0] int  &a[0] int *
//    int *p = a;
//
//    printf("a[0]=%d\n", *p);
//    printf("%p\n", p);
//    p++;//sizeof(int)
//
//    printf("a[1]=%d\n", *p);
//    printf("%p\n", p);
//
//    p++;
//    printf("a[2]=%d\n", *p);
//    printf("%p\n", p);
//
//    p--;
//    printf("%p\n", p);
//    p--;
//    printf("%p\n", p);
//
//    return 0;
//}

//int main(int argc,const char *argv[])
//{
//    char ch= ‘a‘;
//    char *p = &ch;
//    printf("%p\n", p);
//    p++;
//    printf("%p\n", p);
//    p++;
//    printf("%p\n", p);
//    p++;
//    printf("%p\n", p);
//    return 0;
//}

//减法运算
//元素个数
//不同类型的指针不能进行减法运算
//指针不能进行加法运算
int main(int argc, const char *argv[])
{
    int a[10]={};
    int *p = a;
    int *q = &a[5];

    printf("%p %p\n", p,q);
    printf("%ld\n",  q-p);//(q - p)/sizeof(int)

    return 0;
}
时间: 2024-09-05 22:50:54

指针基本操作的相关文章

C语言指针基本操作

C语言指针基本操作 指针 指针介绍 如果说C语言最有魅力的地方在哪,那么毋庸置疑,非指针莫属了. 众所周知,C语言中每个变量都有一个内存地址,可以通过&进行访问.指针是一个变量,它的值是一个变量的内存地址[注意是内存地址]. 指针表达式: type *var-name; //其中type代表C语言的数据类型,例如:int,double,char,float 指针 指针声明 指针进行声明时,=的右边必须为内存地址,不可以是变量(但是int*p=0;除外,该语句表示指针为空) 指针初始化 在初始化指

C++中智能指针的实现

C++中的智能指针是用一个类对另一个对象的指针或者引用进行管理,具体对该类的管理可以用包含对象指针以及引用计数的类来记录: 一般有两种方式实现: 1. 在对象内部记录引用的个数,这需要对象预留引用计数相关的接口 2. 用一个单独的资源管理类进行管理,则不需要修改对象 下面主要是第二种方法:(参考)http://blog.csdn.net/hackbuteer1/article/details/7561235 智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针.每

综合运用(拓展)

学到这里,是不是感觉到所学未能取到什么用,估计会有这种感觉吧? 综合起来讲,C语言知识就是基本数据类型.循环.数组.基本函数运用.指针基本操作......后面还会讲到结构体(联合体.枚举体),全部都是基础知识. 因为是C语言,所以没有对象的概念.所讲全属于最基本的运用. 对于我们而言,这长度如果不说明的话,编译器是不知道的,所以我们需要一种方法计算出数组的长度. 因为前面写过,计算一个int的字节数sizeof(int)是4.目测下,这里有七个数,算字节就是28个字节.sizeof(str[0]

问题 B: 指针的基本操作(2)

 问题 B: 指针的基本操作(2) 题目描述 下面的程序,输入10 100和100 10,均可以输出max=100 min=10,请补充完整程序 #include <iostream> using namespace std; int main( ) { int *p1,*p2,t; //本程序以下不准再加入新的变量,下面用new操作符分配空间,并用p1.p2分别保存其地址 //下面输入两个整数.若无上面分配的空间,这样操作指赂的空间,极其危险 cin>>*p1>>

字符串的基本操作,初始化和赋值之类的区别,和数据名是一个常量指针不可以改变和赋值(盲点众多)

#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h> //一级指针的典型用法 //数组 int a[10] //字符串 //1 C语言的字符串 以零结尾的字符串 //2 在C语言中没有字符串类型 通过字符数组 来模拟字符串 //3 字符串的内存分配 堆上 栈上 全局区 (很重要) //字符数组 初始化 void main51() { //1 指

指针和指针的基本操作

一. 指针简介 指针是C语言中广泛使用的一种数据类型. 运用指针编程是C语言最主要的风格之一.利用指针变量可以表示各种数据结构: 能很方便地使用数组和字符串: 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序.指针极大地丰富了C语言的功能. 指针的基本概念 在计算机中,所有的数据都是存放在存储器中的. 一般把存储器中的一个字节称为一个内存单元, 不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等, 在第二章中已有详细的介绍.为了正确地访问这些内存单元, 必须为每

leetcode Add Two Numbers(对指针的一些基本操作)

1 ListNode *ptr,*l; 2 l = new ListNode(0);//这才是正确的赋值姿势 3 ptr = l;//赋给的是地址 4 int up = 0,fg1 = 0,fg2 = 0; 5 //cout<<"r"<<endl; 6 while(1) 7 { 8 if(fg1 && fg2) break; 9 int a,b; 10 if(fg1) a = 0; 11 else a = l1 -> val; 12 if(

数据结构中线性表的基本操作-合并两个线性表-依照元素升序排列

#include<iostream> #include<stdlib.h> #define LIST_INIT_SIZE 10/*线性表初始长度*/ #define LIST_CREATENT 2/*每次的增量*/ typedef int ElemType; using namespace std; typedef struct SqList/*线性表的数据结构定义*/ { ElemType *elem;/*线性表基址*/ int length;/*当前线性表所含的元素个数*/ i

指针和结构体知识学习

这一周主要学习了C语言中的最灵活的技巧 --指针.指针也是一个变量,它有自己的地址也有指向的地址,一般来说我们更关注的是指针指向的地址.指针的指向可以是整数.浮点数.字符.数组,同样的也可以是一个函数. 指针的基本操作有赋值.求值.取指针地址.将一个整数指针加给指针,增加指针的值.减小指针的值和求差值.如下程序所示: 1 /*ptr_ops.c - 指针操作*/ 2 #include <stdio.h> 3 int main() 4 { 5 int urn[5] = {100, 200, 30