一个int的数+另一个int的数表示什么语句int*p的含义是 这两个数是相加还是相与的关系?

豆丁微信公众号
君,已阅读到文档的结尾了呢~~
[优质文档]2008-2010自学测验Java措辞法度模范设计(一)试题汇编,御法度,御法度 电影,御法度高清,一法度衡石丈尺,内立法度,措辞是什么意思,御法度迅雷下载,议法度而修之于朝廷,正法度之宜
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
[优质文档]自学测验Java措辞法度模范设计(一)试题汇编
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口c++学习笔记
函数调用模型
指针强化...
c++学习笔记
函数调用模型
栈:由编译器自动分配释放,存放函数的参数值,局部变量的值等。
堆:一般由程序员分配释放,若程序员不释放,程序结束时可能由操作系统回收。
全局区:全局变量和静态变量的存储是放在一块的,吃实话的全局变量和静态便令在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。
常量区:字符串常量和其他常量的存储位置,程序结束后由操作系统释放。
代码区:存放函数体的二进制代码。
#include&stdio.h&
#include&stdlib.h&
*getstr1()
char *p1 = "abcdef";
return p1;
*getstr2()
char *p2 = "abcdef";
return p2;
int main()
char *p1 =NULL
char *p2 = NULL;
p1 = getstr1();
p2= getstr2();
printf("%d %d", p1, p2);
运行可以看到p1,p2是相等的,abcdef在常量区。
函数调用模型
划出内存四区训练:
01全局区训练
char *p1= “abcdefg”;
02 堆栈区生命周期训练
Char p1[]= “abcdefg”;
void main26()
char buf[100];
//byte b1 = new byte[100];
int a = 10; //分配4个字节的内存 栈区也叫临时区
int *p;//分配4个字节的内存
p = &a; //cpu执行的代码,放在代码区
*p = 20; //
char *p = NULL; //分配4个字节的内存 栈区也叫临时区
p = (char *)malloc(100); //内存泄露概念
if (p != NULL)
system("pause");
1、主调函数分配的内存空间(堆,栈,全局区)可以在被调用函数中使用,可以以指针作函数参数的形式来使用
2、被调用函数分配的内存空间只有堆区和全局区可以在主调函数中使用(返回值和函数参数),而栈区却不行,因为栈区函数体运行完之后
这个函数占用的内存编译器自动帮你释放了。
3、一定要明白函数的主被调关系以及主被调函数内存分配回收
2.2指针强化
铁律1:指针是一种数据类型
1) 指针也是一种变量,占有内存空间,用来保存内存地址
测试指针变量占有内存空间大小
2)*p操作内存
在指针声明时,*号表示所声明的变量为指针
在指针使用时,*号表示 操作 指针所指向的内存空间中的值
*p相当于通过地址(p变量的值)找到一块内存;然后操作内存
*p放在等号的左边赋值(给内存赋值)
*p放在等号的右边取值(从内存获取值)
3)指针变量和它指向的内存块是两个不同的概念
给p赋值p=0x1111;只会改变指针变量值,不会改变所指的内容;p
= p +1; //p++
给*p赋值*p='a';不会改变指针变量的值,只会改变所指的内存块的值
//含义3 =左边*p表示 给内存赋值,
=右边*p表示取值 含义不同切结!
//含义4 =左边char *p
//含义5保证所指的内存块能修改
4)指针是一种数据类型,是指它指向的内存空间的数据类型
含义1:指针步长(p++),根据所致内存空间的数据类型来确定
p++=è(unsigned char )p+sizeof(a);
结论:指针的步长,根据所指内存空间类型来定。
注意: 建立指针指向谁,就把把谁的地址赋值给指针。图和代码和二为一。
不断的给指针变量赋值,就是不断的改变指针变量(和所指向内存空间没有任何关系)。
铁律2:间接赋值(*p)是指针存在的最大意义
1)两码事:指针变量和它指向的内存块变量
2)条件反射:指针指向某个变量,就是把某个变量地址否给指针
3)*p间接赋值成立条件:3个条件
a)2个变量(通常一个实参,一个形参)
b) 建立关系,实参取地址赋给形参指针
c) *p形参去间接修改实参的值
Int iNum = 0; //实参
int *p = NULL;
*p =2 ; //通过*形参==
间接地改变实参的值
*p成立的三个条件:
4)引申: 函数调用时,用n指针(形参)改变n-1指针(实参)的值。
//改变0级指针(int iNum = 1)的值有2种方式
//改变1级指针(eg char *p = 0x1111)的值,有2种方式
//改变2级指针的(eg char **pp1 = 0x1111)的值,有2种方式
//函数调用时,形参传给实参,用实参取地址,传给形参,在被调用函数里面用*p,来改变实参,把运算结果传出来。
//指针作为函数参数的精髓。
铁律3:理解指针必须和内存四区概念相结合
1) 主调函数 被调函数
a) 主调函数可把堆区、栈区、全局数据内存地址传给被调用函数
b) 被调用函数只能返回堆区、全局数据
2) 内存分配方式
a) 指针做函数参数,是有输入和输出特性的。
铁律4:应用指针必须和函数调用相结合(指针做函数参数)
指针函数参数
内存分配方式(级别+堆栈)
(做输入)
一般应用禁用
Int showbuf(char *p);
int showArray(int *array, int iNum)
(做输出)
int geLen(char *pFileName, int *pfileLen);
(做输入)
一般应用禁用
int main(int arc ,char *arg[]); 指针数组
int shouMatrix(int [3][4], int iLine);二维字符串数组
(做输出)
常用,但不建议用,转化成02
int getData(char **data, int *dataLen);
Int getData_Free(void *data);
Int getData_Free(void **data); //避免野指针
(做输出)
int getFileAllLine(char ***content, int *pLine);
int getFileAllLine_Free(char ***content, int *pLine);
指针做函数参数,问题的实质不是指针,而是看内存块,内存块是1维、2维。
1) 如果基础类int变量,不需要用指针;
2) 若内存块是1维、2维。
铁律5:一级指针典型用法(指针做函数参数)
一级指针做输入
int showbuf(char *p)
int showArray(int *array, int iNum)
一级指针做输出
int geLen(char *pFileName, int *pfileLen);
主调函数还是被调用函数分配内存
被调用函数是在heap/stack上分配内存
铁律6:二级指针典型用法(指针做函数参数)
二级指针做输入
int main(int arc ,char *arg[]); 字符串数组
int shouMatrix(int [3][4], int iLine);
二级指针做输出
int Demo64_GetTeacher(Teacher **ppTeacher);
int Demo65_GetTeacher_Free(Teacher **ppTeacher);
int getData(char **data, int *dataLen);
Int getData_Free(void *data);
Int getData_Free2(void **data); //避免野指针
主调函数还是被调用函数分配内存
被调用函数是在heap/stack上分配内存
铁律7: 三级指针输出典型用法
三级指针做输出
int getFileAllLine(char ***content, int *pLine);
int getFileAllLine_Free(char ***content, int *pLine);
主调函数还是被调用函数分配内存
被调用函数是在heap/stack上分配内存
铁律8:杂项,指针用法几点扩充
1)野指针 2种free形式
int getData(char **data, int *dataLen);
int getData_Free(void *data);
int getData_Free2(void **data);
2)2次调用
主调函数第一次调用被调用函数求长度;根据长度,分配内存,调用被调用函数。
3)返回值char */int/char **
4)C程序书写结构
商业软件,每一个出错的地方都要有日志,日志级别
铁律9:一般应用禁用malloc/new
C语言模型:内存四区模型和函数调用模型
c/c++关于内存四区的模型。
二级指针作为函数参数申请内存
C语言指针高级七
二级指针三种内存模型
二级指针和函数参数——指针参数是如何传递内存的?
C语言之内存四区模型和函数调用模型
04二级指针三种内存模型
二级指针做输入的三种内存模型
没有更多推荐了,利用指针作函数参数,设计一函数实现将n个元素进行排序我怎么输都不对,#include int sort(int*array,int n){int I=0,k=0,j=0;int t=0;for(I=0;I-学路网-学习路上 有我相伴
利用指针作函数参数,设计一函数实现将n个元素进行排序我怎么输都不对,#include int sort(int*array,int n){int I=0,k=0,j=0;int t=0;for(I=0;I
来源:互联网 &责任编辑:李志 &
利用指针作函数参数,设计一函数实现将n个元素进行排序将这n个元素存在数组里,然后用指针类型参数接收即作为形参,然后采用排序算法对这些元素进行排序即可写一个子函数,使用指针作函数参数,计算传入的整型数组元素的...输入为整型数组,返回值为数组元素的和.intsum(intArray[]){intcnt=0,i=0,sum=0;cnt=sizeof(Array)/sizeof(int)for(i=0;i&i++){sum+=Array[i]}returnsum}利用指针作函数参数,设计一个函数对字母进行简单加密,再设计...printf(&%s&,a);和printf(&%s&,b);应分别改为:printf(&%s&,ch1);printf(&%s&,ch2);利用指针类型的数据作函数的参数(输入两个整数按大小输出)为...count的参数中有个地方小于号为4个,temp=*x;的分号是中文,main函数的结束的右大括号没有,请改成如下:#include&iostream.h&voidmain(){voidswap(int*x,int*y);in...怎样用指向函数的指针作函数的参数?函数的指针可以作为一个参数传递给另外一个函数,这一点非常有意思。一个函数用函数指针作参数,意味着这个函数的一部分工作需要通过函数指针调用另外的函数来完成,这被...利用指针作函数参数,设计一函数实现将n个元素进行排序我怎么输都不对,#includeintsort(int*array,intn){intI=0,k=0,j=0;intt=0;for(I=0;I(图3)利用指针作函数参数,设计一函数实现将n个元素进行排序我怎么输都不对,#includeintsort(int*array,intn){intI=0,k=0,j=0;intt=0;for(I=0;I(图5)利用指针作函数参数,设计一函数实现将n个元素进行排序我怎么输都不对,#includeintsort(int*array,intn){intI=0,k=0,j=0;intt=0;for(I=0;I(图7)利用指针作函数参数,设计一函数实现将n个元素进行排序我怎么输都不对,#includeintsort(int*array,intn){intI=0,k=0,j=0;intt=0;for(I=0;I(图9)利用指针作函数参数,设计一函数实现将n个元素进行排序我怎么输都不对,#includeintsort(int*array,intn){intI=0,k=0,j=0;intt=0;for(I=0;I(图11)利用指针作函数参数,设计一函数实现将n个元素进行排序我怎么输都不对,#includeintsort(int*array,intn){intI=0,k=0,j=0;intt=0;for(I=0;I(图13)这是用户提出的一个学习问题,具体问题为:利用指针作函数参数,设计一函数实现将n个元素进行排序我怎么输都不对,怎样用指向函数的指针作函数的参数?函数的指针可以作为一个参数传递给另外一个函数,这一点非常有意思。一个函数用函数指针作参数,意味着这个函数的一部分工作需要通过函数指针调用另外的函数来完成,这被...防抓取,学路网提供内容。#include 利用指针作为函数参数对一位数组进行排序{if(*m&*(m+1)){tem=(*m);(*m)=(*(m+1));(*(m+1))=}j++;m++;}i++;}然后说说你的问题,第一,防抓取,学路网提供内容。int sort(int*array,int n)数组指针作函数参数max=sub_max(ptr,10);//这个里面的10是起什么作用?10,是要带进一个函数里面的参数(实参):intsub_max(b,i)//里面的i起什么作用?i,就是一个参防抓取,学路网提供内容。{int I=0,k=0,j=0;C语言指针变量作函数参数问题求大神帮忙因为使用地址作参数,那么传参就是传地址啊,当然要传u_x即&x啦另外,对指针来说,定义的时候加*是为了区别指针变量与非指针变量,如果函数定义中的int*a防抓取,学路网提供内容。int t=0;C语言指针作函数参数中数据的双向传递是什么意思?指针做参数,传递的是地址,一般变量做参数,传递的是值。打个比方你有一个实验室,值传递就是再建造一个一模一样的实验室交给自定义函数,就算复制出来的实验室折防抓取,学路网提供内容。for(I=0;I拷贝构造函数使用指针作为参数初始化创建中的对象。()不是用指针,而是用地址!防抓取,学路网提供内容。我们通过互联网以及本网用户共同努力为此问题提供了相关答案,以便碰到此类问题的同学参考学习,请注意,我们不能保证答案的准确性,仅供参考,具体如下:用指针作if语句的条件表达式意味著什么?答:当把一个指针作为条件表达式时,所要判断的条件实际上就是“该指针是否为一空指针”。在if,while,for或do/while等语句中,或者在条件表达式中,都防抓取,学路网提供内容。用户都认为优质的答案:指针做形参有什么用答:最好的例子给你:swap(inta,intb){intt=a;a=b;b=t;}swap1(int*a,int*b){intt=*a;*a=*b;*b=t;}intmain(){防抓取,学路网提供内容。/*你的程序有很多错误,选择排序也没写好指针引用作参数和指针做参数的区别????问:voidf(int*p)和voidf(int*&rp)有什么区别?我知道rp不占内存空间,...答:楼上的没说全,你都知道引用是别名,那就应该知道在函数内部防抓取,学路网提供内容。修改如下*/指针能作为引用参数吗?答:任何变量类型都可以作为引用指针也不例外。比如voidfunc(char*&p){p=newchar[100];}这里对p的赋值会同步改变主调函数中的实参。防抓取,学路网提供内容。#include 利用指针作为函数参数对一位数组进行排序{if(*m&*(m+1)){tem=(*m);(*m)=(*(m+1));(*(m+1))=}j++;m++;}i++;}然后说说你的问题,第一,防抓取,学路网提供内容。/*头文件名没写对*/int sort(int*array,int n)数组指针作函数参数max=sub_max(ptr,10);//这个里面的10是起什么作用?10,是要带进一个函数里面的参数(实参):intsub_max(b,i)//里面的i起什么作用?i,就是一个参防抓取,学路网提供内容。{int I=0,k=0,j=0;C语言指针变量作函数参数问题求大神帮忙因为使用地址作参数,那么传参就是传地址啊,当然要传u_x即&x啦另外,对指针来说,定义的时候加*是为了区别指针变量与非指针变量,如果函数定义中的int*a防抓取,学路网提供内容。int t=0;C语言指针作函数参数中数据的双向传递是什么意思?指针做参数,传递的是地址,一般变量做参数,传递的是值。打个比方你有一个实验室,值传递就是再建造一个一模一样的实验室交给自定义函数,就算复制出来的实验室折防抓取,学路网提供内容。for(I=0;I拷贝构造函数使用指针作为参数初始化创建中的对象。()不是用指针,而是用地址!防抓取,学路网提供内容。利用指针作为函数参数对一位数组进行排序{if(*m&*(m+1)){tem=(*m);(*m)=(*(m+1));(*(m+1))=}j++;m++;}i++;}然后说说你的问题,第一,执行一次循环后,m已经超出数组范围了,再使用该指针其实...数组指针作函数参数max=sub_max(ptr,10);//这个里面的10是起什么作用?10,是要带进一个函数里面的参数(实参):intsub_max(b,i)//里面的i起什么作用?i,就是一个参数(形参),上面的10就是代替...C语言指针变量作函数参数问题求大神帮忙因为使用地址作参数,那么传参就是传地址啊,当然要传u_x即&x啦另外,对指针来说,定义的时候加*是为了区别指针变量与非指针变量,如果函数定义中的int*a,int*b的两个星...C语言指针作函数参数中数据的双向传递是什么意思?指针做参数,传递的是地址,一般变量做参数,传递的是值。打个比方你有一个实验室,值传递就是再建造一个一模一样的实验室交给自定义函数,就算复制出来的实验室折腾的爆炸...
相关信息:
- Copyright & 2017 www.xue63.com All Rights Reserved按位与、或、异或等运算方法
按位与运算符(&)
参加运算的两个数据,按二进制位进行“与”运算。
运算规则:0&0=0;&&
1&0=0;&&&&
即:两位同时为“1”,结果才为“1”,否则为0
例如:3&5& 即
因此,3&5的值得1。
另,负数按补码形式参加按位与运算。
“与运算”的特殊用途:
(1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。
(2)取一个数中指定位
方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位。
例:设X=,
取X的低4位,用 X &
1110&即可得到;
还可用来取X的2、4、6位。
按位或运算符(|)
参加运算的两个对象,按二进制位进行“或”运算。
运算规则:0|0=0;
&&0|1=1;&&
1|0=1;&&&
即 :参加运算的两个对象只要有一个为1,其值为1。
例如:3|5 即 0000
因此,3|5的值得7。 
另,负数按补码形式参加按位或运算。
“或运算”特殊作用:
(1)常用来对一个数据的某些位置1。
方法:找到一个数,对应X要置1的位,该数的对应位为1,其余位为零。此数与X相或可使X中的某些位置1。
例:将X=的低4位置1 ,用
= 即可得到。
异或运算符(^)
参加运算的两个数据,按二进制位进行“异或”运算。
运算规则:0^0=0;&&
1^0=1;&& 1^1=0;
&&&即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。
“异或运算”的特殊作用:
(1)使特定位翻转
找一个数,对应X要翻转的各位,该数的对应位为1,其余位为零,此数与X对应位异或即可。
例:X=,使X低4位翻转,用X ^
= 即可得到。
(2)与0相异或,保留原值 ,X ^ 0000
从上面的例题可以清楚的看到这一点。
取反运算符(~)
参加运算的一个数据,按二进制位进行“取反”运算。
运算规则:~1=0;&&
即:对一个二进制数按位取反,即将0变1,1变0。
使一个数的最低位为零,可以表示为:a&~1。
~1的值为1110,再按“与”运算,最低位一定为0。因为“~”运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他运算符都高。
左移运算符(&&)
将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
将a的二进制位左移2位,右补0,
左移1位后a&=&a *
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
右移运算符(&&)
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
操作数每右移一位,相当于该数除以2。
例如:a = a
&& 2 将a的二进制位右移2位,
左补0&or 补1
得看被移数是正还是负。
&& 运算符把
expression1 的所有位向右移 expression2
指定的位数。expression1
的符号位被用来填充右移后左边空出来的位。向右移出的位被丢弃。
例如,下面的代码被求值后,temp 的值是 -4:
& -14 (即二进制的 )右移两位等于 -4
(即二进制的 )。
& var temp = -14 && 2
&&无符号右移运算符(&&&)
运算符把 expression1 的各个位向右移
expression2 指定的位数。右移后左边空出的位用零来填充。移出右边的位被丢弃。
例如:var temp = -14 &&&
的值为 -14 (即二进制的 11
),向右移两位后等于
(即二进制的 11
复合赋值运算符
位运算符与赋值运算符结合,组成新的复合赋值运算符,它们是:
&&&相当于a=a
&&&相当于a=a |
&&&&相当于a=a
&&& 相当于a=a
^=&& 例:a ^= b
&&&&&&相当于a=a
运算规则:和前面讲的复合赋值运算符的运算规则相似。
不同长度的数据进行位运算
如果两个不同长度的数据进行位运算时,系统会将二者按右端对齐,然后进行位运算。
以“与”运算为例说明如下:我们知道在C语言中long型占4个字节,int型占2个字节,如果一个long型数据与一个int型数据进行“与”运算,右端对齐后,左边不足的位依下面三种情况补足,
(1)如果整型数据为正数,左边补16个0。
(2)如果整型数据为负数,左边补16个1。
(3)如果整形数据为无符号数,左边也补16个0。
如:long a=123;int b=1;计算a
如:long a=123;int b=-1;计算a
如:long a=123;unsigned int
b=1;计算a & b。
已投稿到:排好序应该是升序吧,复杂度O(size_a+size_b) boolean findCommon(int a[],int size_a,int b[],int size_b){
boolean res=
if(size_a&=0||size_b&=0)
int i=0,j=0;
while(i&size_a&&j&size_b)
if(a[i]==b[j]){
if(a[i]&b[j])
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题
京ICP备号-4
扫一扫,把题目装进口袋

我要回帖

更多关于 int (*ptr)的含义 的文章

 

随机推荐