精华内容
下载资源
问答
  • (1)给指针变量赋值 int main(){ int x=3,y=6; int *a=&x,*b=&y;//a,b指向整型变量x,y printf("%d %d\n",*a,*b); } (2)引用指针变量指向的变量 int main(){ int x,y; int *a=&x,*b=&y; ...

    怎样引用指针变量

    (1)给指针变量赋值

    int main(){
    	int x=3,y=6;
    	int *a=&x,*b=&y;//a,b指向整型变量x,y
    	printf("%d %d\n",*a,*b);
    } 
    

    在这里插入图片描述

    (2)引用指针变量指向的变量

    int main(){
    	int x,y;
    	int *a=&x,*b=&y;
    	*a=4;*b=5;//将4,5分别赋给a,b当前所指变量,即把4,5赋给x,y
    	printf("%d %d",x,y);	
    } 
    

    在这里插入图片描述
    (3)引用指针变量的值

     
    int main(){
    	int x=3,y=6;
    	int *a=&x,*b=&y;
    	printf("%d %d\n",*a,*b);//输出变量a,b的值
    	printf("%d %d\n",a,b);//输出a,b的地址
    } 
    

    在这里插入图片描述
    不懂请留言,谢谢

    展开全文
  • 这个函数的作用是,主函数的变量间接赋值,这是二级指针的一个应用。 主函数不必考虑getMem3这个子函数是怎样实现的,这个思想很重要。 // 这个函数作用是,计算文件1和文件2的长度 // main()中的变量,不需要知道...

    这个函数的作用是,给主函数的变量间接赋值,这是二级指针的一个应用。
    主函数不必考虑getMem3这个子函数是怎样实现的,这个思想很重要。

    // 这个函数作用是,计算文件1和文件2的长度
    // main()中的变量,不需要知道getMem函数是怎样实现的
    void getMem3(char **myp1,int *mylen1,char **myp2,int *mylen2)
    {
    	int ret = 0;
    	char *tmp1, *tmp2;
    	
    	tmp1 = (char*)malloc(100);
    	strcpy(tmp1, "11111111111");
    	// 间接赋值
    	*mylen1 = strlen(tmp1);  //1级指针
    	*myp1 = tmp1; //2级指针的间接赋值
    
    	tmp2 = (char *)malloc(200);
    	strcpy(tmp2, "22222222222");
    	*mylen2 = strlen(tmp2);// tmp2内存的大小
    	*myp2 = tmp2; //2级指针的间接赋值
    
    	return ret;
    }
    
    int main()
    {
    	int ret = 0;  // 在常量区开辟4个字节的内存空间,赋值为0
    	char *p1 = NULL; //在栈中开辟一个p1
    	int len1 = 0;	// 
    	char *p2 = NULL;//在栈中开辟一个p2
    	int len2 = 0;
    	getMem3(&p1, &len1, &p2, &len2);
    	
    	printf("p1:%s \n", p1);
    	printf("p2:%s \n", p2);
    
    
    	system("pause");
    	return 1;
    }
    

    下面是对应的内存图
    在这里插入图片描述

    展开全文
  • 1.指针是什么? 在内存单元中,我们可以通过一个地址找到一个变量,一个变量的地址就叫做该变量的“指针”。如果定义一个变量,该变量专门用来存放另一个变量的地址,则称它为指针变量。...给指针变量赋值

    1.指针是什么?

    在内存单元中,我们可以通过一个地址找到一个变量,一个变量的地址就叫做该变量的“指针”。如果定义一个变量,该变量专门用来存放另一个变量的地址,则称它为指针变量。
    指针变量的值(即指针变量中存放的值)是地址(即指针)。

    2.怎样定义指针变量

    int *p;
    

    (1)指针变量是p,而不是*p,前面的*只是用来表示该变量为指针变量。
    (2)在定义指针变量时必须制定基类型,即int。

    3.怎样操作指针变量

    一般对指针变量的操作有两种(1)给指针变量赋值;(2)访问指针变量所指向的对象
    给指针变量赋值:使用取地址符&,例如

    int *p;
    int a=1;
    p=&a;
    

    访问指针变量所指向的对象:使用“间接访问”符 *号

    printf(“%d”,*p);
    

    4.指针变量作为函数参数

    以下面的函数为例:

    void swap(int *p1,int *p2)//swap函数的形参为两个指针变量
    {
    int temp;
    temp = *p1;
    *p1=*p2;
    *p2=temp;
    }
    int main()
    {
    int a=1,b=2;
    int *point1,*point2;
    point1=&a;point2=&b;
    swap(point1,point2);//调用时需要注意形参的类型
    }
    

    注意:不能通过企图改变指针形参的值而使指针实参的值改变
    将swap函数改成如下形式

    void swap(int *p1,int *p2)
    {
    int  *temp;
    temp = p1;
    p1=p2;
    p2=temp;
    }
    

    C语言中实参变量与形参变量之间数据传递的方式是值传递,不可能通过执行swap函数来改变实参指针变量的值。

    5.通过指针引用数组元素

    数组元素的指针就是数组元素的地址。

    int 	*p;
    int 	a[10];
    p=a;
    p=&a[0];//与上一句等价,因为数组名就代表该数组首元素的地址
    

    指针元素的运算:当指针指向数组元素时,可以对指针进行一下运算:
    (1)p+1,p++:如果p指向a[0],则p+1(p++)指向a[1]
    (2)p-1,p–:如果p指向a[1],则p-1(p–)指向a[0]
    通俗的来讲,如果p的初值为a[0](即&a[0]),则p+i就是a+i元素a[i]的地址。
    *(p+i)或者*(a+i)是p+i或者a+i所指向的数组元素,例如*(p+5)就是a[5]。

    根据以上所述,引用一个数组,可以有一下两种方法:
    (1)使用数组下标a[i]
    (2)指针法,如*(a+i)或者*(p+i),其中a是数组名,p是指向数组元素的指针变量,p=a

    6.改变数组元素的方法

    (1)实参与形参都用数组名,例如

    void main()
    {
    int a[10];
    f(a,10);
    }
    void f(int x[],int n)
    {
    
    }
    

    (2)实参用数组名,形参用指针变量

    void main()
    {
    int a[10];
    f(a,10);
    }
    void f(int *x,int n)
    {
    
    }
    

    (3)实参与形参都用指针变量

    void main()
    {
    int a[10];
    int *p=a;
    f(p,10);
    }
    void f(int *x,int n)
    {
    
    }
    

    (4)实参为指针变量,形参为数组名

    void main()
    {
    int a[10];
    int *p=a;
    f(a,10);
    }
    void f(int x[],int n)
    {
    
    }
    

    7.指针与多维数组

    这里以二维数组a为例,如下表所示

    在这里插入图片描述

    8.通过指针引用字符串
    (1)用指针访问字符串

    char a[]=”I am a boy”;
    char *p;
    p=a;
    printf("%s", p);//打印内容:I am a boy
    

    (2)字符指针作为函数参数

    int del(char *str,char *sub)
    {   int i=0,j=0,count=0;
    	while(*(sub+i)!='\0')
    	{
    		while(*(str+j)!=0)
    		{
    			if(*(sub+i)==*(str+j))
    			{
    				count++;
    			}
    			j++;
    		}
    		i++;
    		j=0;
    		
    	}
    	
    	return count;
    }
    int main()
    {
    	int a=0;	
    	char s1[10];
    	char s2[10];
    	char *str=s1,*sub=s2;
    	printf("请输出被查找的字符\n");
    	scanf("%s",str);
    	printf("请输出要查找的字符\n");
    	scanf("%s",sub);
    	printf("相同字符的个数\n");
    	a=del(str,sub);
    	printf("%d",a);
    	return 0;
    }
    

    在主函数中调用del函数,将字符数组s1和s2传入,打印输出字符串s1和字符串s2中相同字符的个数。但是del函数的形参并不是字符数组,而是指向字符指针变量。

    (3)关于使用字符数组和字符指针变量的讨论

    ① 字符数组由若干个字符元素组成,字符指针变量中存放的是地址(字符串的第一个字符的地址),绝不是将字符串放到字符指针变量中。
    ② 赋值方式:字符数组只能对各元素赋值,不能用以下方式

    char str[14];
    str=”I am a boy”;
    

    而对字符指针变量就是可以的

    char *a;
    a=”I am a boy”;
    

    注意:赋值给a的不是字符,而是字符串的第一个元素的地址
    ③ 野指针问题
    如果定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址。而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个字符变量的地址,但如果未对它赋予一个地址值,则他并未指向一个确定的字符数据。

    char *a;
    scanf(“%s”,a);
    

    以上语句在编译时会出现警告:未给指针变量指定初始值。虽然可以勉强运行,但是这种方法使极其危险的,因为在编译的时候a的值未指定,a在内存单元中是一个不可预料的值,指向的内容可能是存放指令或者数据的有用内存段,手动输入后悔造成不可想象的后果。
    ④ 字符数组中各元素的值是可以改变的,但是字符指针变量指向的字符串中的内容是
    不可以被取代的,如:

    char *a[]=”House”;
    char *b=”House”;
    a[2]=’r’;   /*合法,r取代u*/
    b[2]=’r’;  /*非法,字符串常量不能改变*/
    

    9.指向函数的指针

    ① 什么是函数指针
    编译系统为函数代码分配了一段存储空间,这段存储空间的起始地址(又称入口地址)称为这个函数的指针。可以定义一个指针,用来存放某一函数的起始地址,这就意味值此指针指向该函数。
    ② 如何定义函数指针变量

    int (*p)(int,int)//表示定义一个指向函数的指针变量p
    

    ③ 如何使用函数指针变量

    void main()
    {
    int (*p)(int,int);
    p=max;//在给函数指针变量赋值时,秩序给出函数名,而不必给出参数
    //p=max(a,b);是将调用max函数所得到的函数值赋给p,而不是将函数入口地址赋给p
    }
    int max(int x,int y)
    {
    
    }
    

    ④ 指向函数的指针变量运算时无意义的
    如p+n,p++,p–
    10.返回指针值得函数

    int *a(int x,int y);
    

    a是函数名,x和y是函数a的形参,为整形。这种形式与定义指向函数的指针变量很类似,但是注意:在*a两侧没有括号。

    11.指针数组
    一个数组,若其元素均为指针类型数据,称为指针数组,也就是说指针数组中的每一个元素都存放一个地址,相当于一个指针变量。

    int *p[4];
    

    12.指向指针数据的指针

    设置一个指针变量p,它指向指针数组的元素,p就是指向指针型数据的指针变量。
    定义一个指向指针数据的指针变量:

    char * *p;
    

    p前面有两个*号,*运算符的结合性是从右到左,因此**p相当于*(*p),显然*p是指针变量的定义形式,现在*p前面又有一个*号,表示指针变量p是指向一个字符指针变量的。

    p=name+2;
    printf(“% o\n”,*p);//输出name[2]的值,是一个地址
    printf(“% s\n”,*p);//输出name[2]中所存地址中的内容,为一个字符串(假设name[2]所存储的地址指向的内容为字符串)
    

    13.动态内存分配

    全局变量是分配在内存中的静态存储区的,非静态存储区的局部变量(包括形参)是分配在内存中的动态存储区的,这个存储区叫做栈。
    内存动态分配的几个函数:以下4个函数声明在stdlib.h
    ① malloc函数
    malloc(100);//开辟100字节的临时分配域,函数值为其第1个字节的地址
    ② calloc函数
    p=calloc(50,4);//开辟50*4个字节的临时分配域,把起始地址赋给指针变量p
    ③ free函数
    free§;//释放指针变量p指向的已分配的动态空间
    ④ realloc函数
    realloc(p,50);//将品所指向的已分配的动态空间改为50字节

    展开全文
  • 指针去修改const变量的值

    千次阅读 2015-09-21 15:46:32
    其实是在编译期间编译器在遇到const声明的变量后会把此变量记录下来(我猜测的可能就是这样),比如表,每当遇到为一个变量赋值时就查表如果表中有此变量则出警告(只是我猜测),而编译器也没有禁止我们对一个const变...

    怎样修改c++中被const修饰的变量?
    你要知道的一点是,编译器在遇到const关键字修饰的变量后并没有在每次使用该变量的代码前插入检测代码,检测是否对其进行写入如果是则禁止对其修改,。

    其实是在编译期间编译器在遇到const声明的变量后会把此变量记录下来(我猜测的可能就是这样),比如表,每当遇到为一个变量赋值时就查表如果表中有此变量则给出警告(只是我猜测),
    而编译器也没有禁止我们对一个const变量取地址,否则这样的声明也是不允许的 const int *p,所以如果我们取得了一个const变量的地址,再把它转换为int *类型,,,,,,
    const int a=1;
    const int *p=&a;
    *(int*)p=2;

    如果了解C++对象内存模型的还可以这样来修改一个const变量
    class A{
    public:
    const int i;
    A(int j):i(j){}
    }
    A a(0);
    int b=1;
    *(int *)(&a)=b;

    怎样修改一个private变量???、
    class A{
    public:
    const int i;
    A(int j):i(j){}
    private:
    int a;
    }
    A a(0);
    int b=1;
    *(int *)(&a)=b;
    *(((int*)&a)+1)=2;


    展开全文
  • 指针,调用,返回

    2016-07-31 16:32:47
    给指针变量赋值:p=&a;//把a的地址赋给p b.引用指针变量指向的变量: p=&a; printf(“%d\n”,*p);指针变量p所指向的变量值是变量a的值。 如果下面有语句*p=1,则a=1. c.引用指针变量的值:printf("%d\n",p);...
  • //在堆内存申请一块内存 32位 4字节,64位 8字节 的空间 ,定义一个指针变量 p 指向这块空间 int * p = (int *)malloc(sizeof(int)); //变量p所指的变量地址赋值 *p = 10; // free(p...
  • 把字符串常量赋值给一个字符指针变量,指针的值怎么变,指针指向的内容是什么? 主函数调用子函数时传递了一个字符数组首地址,子函数把传递过来的字符指针重新指向一个字符串,函数调用结束后,主函数里的数组名...
  • 从上些章节block-变量的捕获(caputer)中,详细说了基本类型的auto变量的捕获,现在来了解下,对象类型的auto变量怎样捕获和底层结构是如何的。...- block赋值给__strong指针时 - block作为Cocoa A...
  • 每一个MFC应用程序都有一个CWinApp派生类的对象。这个对象对应着程序的主线程。...而这个成员只能在C**APP类中才可以使用,所以怎样使用这个CWinApp类里的CWnd 类型的变量来得到主框架窗口的指针呢??
  • Delphi pointer

    千次阅读 2015-09-12 17:13:25
    怎样才能访问pointer指针的所有数据?(最好有多种方法一起说明)  例:  var  p:pointer  begin  p:=一个指针变量  p:=p+1;//为什么不能这样使用?怎样才能指向下一个地址?... //给指针赋值 
  • Delphi pointer .

    千次阅读 2013-10-11 11:32:18
    怎样才能访问pointer指针的所有数据?(最好有多种方法一起说明)  例:  var  p:pointer  begin  p:=一个指针变量  p:=p+1;//为什么不能这样使用?怎样才能指向下一个地址?... //给指针赋值  p:
  • 8.5.3 怎样定义和使用指向函数的指针变量 8.5.4 用指向函数的指针作函数参数 8.6 返回指针值的函数 8.7 指针数组和多重指针 8.7.1 什么是指针数组 8.7.2 指向指针数据的指针 8.7.3 指针数组作main函数的形参 8.8 ...
  • 假设现在需要往内存地址0x12ff7c上存入一个整型数0x100,那么怎样才能做到呢?  我们知道可以通过一个指针向其指向的内存地址写入数据,那么这里的内存地址0x... 需要注意的是,将地址0x12ff7c赋值给指针变量p的...
  • 10.4.2 使用字符串指针变量与字符数组的区别 158 10.5 函数指针变量 159 10.6 指针型函数 160 10.7 指针数组和指向指针的指针 161 10.7.1 指针数组的概念 161 10.7.2 指向指针的指针 164 10.7.3 main 函数的参数 166...
  • 10.4.2 使用字符串指针变量与字符数组的区别 158 10.5 函数指针变量 159 10.6 指针型函数 160 10.7 指针数组和指向指针的指针 161 10.7.1 指针数组的概念 161 10.7.2 指向指针的指针 164 10.7.3 main 函数的参数 166...
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    能否暂时把整数放入指针变量中,或者相反? *4.15 我怎样把一个int变量转换为char*型?我试了类型转换,但是不行。 第5章 空指针 空指针和空指针常量 5.1 臭名昭著的空指针到底是什么? 5.2 怎样在程序里...
  • 能否暂时把整数放入指针变量中,或者相反?  4.15 我怎样把一个int变量转换为char *型?我试了类型转换,但是不行。 第5章 空指针  空指针和空指针常量  5.1 臭名昭著的空指针到底是什么?  5.2 怎样在程序里...
  • 能否暂时把整数放入指针变量中,或者相反? 51 *4.15 我怎样把一个int变量转换为char *型?我试了类型转换,但是不行。 52 第5章 空指针 53 空指针和空指针常量 53 5.1 臭名昭著的空指针到底是什么? 53 ...
  • 能否暂时把整数放入指针变量中,或者相反? 4.15 我怎样把一个int变量转换为char *型?我试了类型转换,但是不行。 第5章 空指针 空指针和空指针常量 5.1 臭名昭著的空指针到底是什么? 5.2 怎样在程序里获得一个空...
  • 能否暂时把整数放入指针变量中,或者相反? 80 *4.15 我怎样把一个int变量转换为char *型?我试了类型转换,但是不行。 81 第5章 空指针 82 空指针和空指针常量 82 5.1 臭名昭著的空指针到底是什么? 82 5.2 ...
  • 能否暂时把整数放入指针变量中,或者相反? 80 *4.15 我怎样把一个int变量转换为char *型?我试了类型转换,但是不行。 81 第5章 空指针 82 空指针和空指针常量 82 5.1 臭名昭著的空指针到底是什么? 82 5.2 ...
  • 137_指针17_何谓变量的地址 一个指针变量到底占几个字节【难点】 136_指针16_指针变量的运算 135_指针15_复习上节课知识 134_指针14_确定一个一维数组需要2个参数及其原因_下 134_指针14_确定一个一维数组需要2个...
  • 能否暂时把整数放入指针变量中,或者相反? 4.15 我怎样把一个int变量转换为char *型?我试了类型转换,但是不行。 第5章 空指针 空指针和空指针常量 5.1 臭名昭著的空指针到底是什么? 5.2 怎样在程序里获得一个空...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    能否暂时把整数放入指针变量中,或者相反? 51 *4.15 我怎样把一个int变量转换为char *型?我试了类型转换,但是不行。 52 第5章 空指针 53 空指针和空指针常量 53 5.1 臭名昭著的空指针到底是什么? 53 ...
  • 7.24 为什么不能指针赋值?什么是总线错误、内存错误和内存信息转储? 7.25 怎样确定一块已分配的内存的大小? 7.26 free()函数是怎样知道要释放的内存块的大小的? 7.27 可以对void指针进行算术运算吗? ...
  • C语言编程要点

    2017-09-18 00:10:37
    7.24. 为什么不能指针赋值?什么是总线错误、内存错误和内存信息转储? 126 7.25. 怎样确定一块已分配的内存的大小? 126 7.26. free()函数是怎样知道要释放的内存块的大小的? 126 7.27. 可以对void指针进行算术...

空空如也

空空如也

1 2 3 4
收藏数 77
精华内容 30
关键字:

怎样给指针变量赋值